Pregunta

Estoy intentando crear una sesión de forma explícita como esto UserSession.create(@user, true) pero la sesión no está siendo creado, current_user es nil.

Pero cuando hago esto, me sale <#UserSession: {: unauthorized_record => ""}>

us = UserSession.create(@user, true)
RAILS_DEFAULT_LOGGER.info(us.inspect) #=> UserSession: {:unauthorized_record=>""}

Yo tenía un vistazo a Authlogic :: :: Sesión UnauthorizedRecord aquí dice

Tenga cuidado con esto, porque Authlogic está asumiendo que ya ha confirmado que el usuario es quien dice ser. Por ejemplo, este es el método utilizado para persistir la sesión internamente. Authlogic encuentra el usuario con la persistencia simbólica. En este punto, sabemos que el usuario es quien dice ser, por lo Authlogic sólo crea una sesión con el registro. Esto es particularmente útil para los métodos de autenticación de 3 ª Parte, como OpenID. Deje que el método de verificar la identidad, una vez que se verifica, pase el objeto y crear una sesión.

, que es exactamente lo que yo estoy tratando de hacer (soy autentica a través de OmniAuth y la creación de sesión mediante authlogic).

¿Cómo puedo solucionar este problema, por lo que puede obtener una sesión válida en current_user?

¿Fue útil?

Solución

No estoy seguro acerca de la firma del método .Create (objeto, bool), pero usando las siguientes obras authlogic.

class Api::ApiBaseController < ApplicationController  
  protected

  def verify_token    
    return false if params[:token].blank?
    @session = UserSession.new(User.find_by_single_access_token(params[:token]))
    @session.save
  end
end

Si eso no funciona para usted -. Creo que el @user no está siendo ajustado correctamente

Otros consejos

Yo tenía un problema similar causado por el ser persistence_token nula en el usuario. Restablecerla antes de crear el UserSession. Así que ...

@user.reset_persistence_token!
UserSession.create(@user, true)

Si asigna el active_record_store a la mesa authlogic user_sessions su información de sesión se almacena en la base de datos, y usted será capaz de almacenar grandes conjuntos de datos.

Dentro de la carpeta de configuración: config/initializers/session_store.rb

  • Responder a cabo App::Application.config.session_store :cookie_store, :key => '_App_session'
  • Agregar o App::Application.config.session_store :active_record_store uncomment

Dentro de config/application.rb

  • Al final de la clase para su aplicación add: ActiveRecord::SessionStore::Session.table_name = 'user_sessions'

Reiniciar su aplicación, y cualquier información almacenada en la sesión del usuario se guarda en la tabla user_sessions authlogic.

Ir a: http://apidock.com/rails/ActiveRecord/SessionStore Para obtener más información

Por ahora se puede reemplazar

UserSession.create @user

a

UserSession.create :email => @user.email, :password => @user.password

No es un gran problema.

Pero eso me tomó otra manera. Se me olvidó que mi usuario tiene active? == false cuando se creó. Yo he instalado a true se crea y sesión.

me encontré con este problema hoy en día. En mi caso terminó siendo relacionada con CSRF fichas.

Estamos creando un usuario y una sesión de nuestra aplicación en respuesta a una llamada de retorno de OAuth. Parece ser que si el token CSRF no es válido, lo que sería el caso cuando viene de un tercero, se authlogic no crea la sesión de usuario.

No se puede verificar CSRF token de autenticidad

La solución fue simple:

class Oauth::UserSessionsController < ApplicationController
  skip_before_action :verify_authenticity_token, only: :callback

  def new
    # code removed...
  end

  def callback
    # code removed...
    UserSession.create(@user)
    redirect_to root_path
  end
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top