ruby-on-rails - instalar - rspec rails devise
Rails Devise-current_user es nulo (3)
Por algún motivo, current_user
devuelve nil
en mi controlador sin modelo ( Subscriptions
). No he encontrado nada en Internet para justificar este comportamiento ...
class SubscriptionsController < ApplicationController
def new
...
end
def create
current_user # returns nil
end
end
Tengo una metaetiqueta csrf:
<meta content="xxx" name="csrf-token">
Puedo proporcionar más código, pero no estoy seguro de qué sería útil.
ACTUALIZAR
Entonces, gracias a los comentarios / respuestas, identifiqué el problema en una acción particular: create
.
si agrego @user = current_user
a la new
, puedo mostrar el correo electrónico actual del usuario en mi new
vista. Sin embargo, en mi controlador de create
, current_user
devuelve nil
.
Accedí a la acción de create
través de un formulario (enviar).
Antes de enviar el formulario, valido la entrada y luego envío una solicitud a Stripe para obtener un token del formulario. Si no hay errores (validación y raya), entonces envío el formulario.
Podría ser la causa?
ACTUALIZACIÓN 2
En mi mensaje de error, mi volcado de sesión está vacío , mientras que debería contener la información del usuario actual ...
para que current_user
funcione, debes agregar before_filter :authenticate_user!
a su clase, como:
class SubscriptionsController < ApplicationController
before_filter :authenticate_user!
def new
...
end
def create
curent_user # returns nil
end
end
y el authenticate_user!
método configurará el usuario actual para usted :)
Resultó que la solicitud de AJAX que estaba haciendo no llevaba el token de CSRF. Por esa razón, Rails estaba matando mi sesión.
skip_before_filter :verify_authenticity_token
en mi SubscriptionsController
y ahora está funcionando. Puede que no sea la solución más segura, pero funciona por ahora, así que sigo desarrollando y volviendo a este tema más adelante.
Tenga en cuenta que cuando crea formularios utilizando form_tag
helper, no generan automáticamente el campo oculto que contiene el token para la autenticación CSRF. Me encontré con este mismo problema con un formulario que había construido utilizando form_tag
que a veces prefiero usar.
Solucioné el problema al incluir los siguientes ayudantes en el formulario:
<%= hidden_field_tag ''authenticity_token'', form_authenticity_token %>
Básicamente es una forma manual de generar el campo oculto que necesita para el material de CSRF.