tutorial rails instalar ejemplos ruby-on-rails ruby ruby-on-rails-3 devise

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.