Ruby on rails authlogic UserSession.create(@user)提供未经授权的\u记录

Ruby on rails authlogic UserSession.create(@user)提供未经授权的\u记录,ruby-on-rails,authlogic,omniauth,Ruby On Rails,Authlogic,Omniauth,我正试图创建一个明确的会话,如下所示UserSession.create(@user,true),但是没有创建会话,current\u user是nil 但是当我这样做的时候,我得到了“}> 我看了这里,上面写着 注意这一点,因为Authlogic假定您已经确认用户就是他所说的那个人。例如,这是用于在内部持久化会话的方法。Authlogic查找具有持久性令牌的用户。此时,我们知道用户就是他所说的那个人,所以Authlogic只是用记录创建了一个会话。这对于第三方身份验证方法(如OpenID)特别

我正试图创建一个明确的会话,如下所示
UserSession.create(@user,true)
,但是没有创建会话,
current\u user
nil

但是当我这样做的时候,我得到了“}>

我看了这里,上面写着

注意这一点,因为Authlogic假定您已经确认用户就是他所说的那个人。例如,这是用于在内部持久化会话的方法。Authlogic查找具有持久性令牌的用户。此时,我们知道用户就是他所说的那个人,所以Authlogic只是用记录创建了一个会话。这对于第三方身份验证方法(如OpenID)特别有用。让该方法验证身份,验证后,传递对象并创建会话

这正是我试图做的(我正在使用omniauth进行身份验证,并使用authlogic创建会话)


如何修复此问题,以便在
当前用户中获得有效会话?

我不确定.create(object,bool)方法签名,但以下使用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
class Api::ApiBaseController

如果这对您不起作用--我认为@user设置不正确。

我不确定.create(object,bool)方法签名是否正确,但下面使用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
class Api::ApiBaseController

如果这对您不起作用--我认为@user设置不正确。

现在您可以替换它

UserSession.create @user

没什么大不了的


但这让我有了另一种感觉。我忘了我的用户已激活创建时为false
。我已将其设置为
true
并创建了会话。

现在您可以替换

UserSession.create @user

没什么大不了的


但这让我有了另一种感觉。我忘了我的用户已激活创建时为false
。我已将其设置为
true
并创建了会话。

我遇到了一个类似的问题,原因是用户的持久性令牌为零。在创建UserSession之前重置它。所以

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

我遇到了一个类似的问题,原因是用户的持久性标记为nil。在创建UserSession之前重置它。所以

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

如果将
活动记录\u存储
映射到
authlogic user\u sessions
表,您的会话信息将存储在数据库中,并且您将能够存储更大的数据集

在配置文件夹中:
config/initializers/session\u store.rb

  • 注释掉App::Application.config.session\u store:cookie\u store,:key=>“\u App\u session”
  • 添加或取消注释
    App::Application.config.session\u存储:活动\u记录\u存储
config/application.rb的内部

  • 在应用程序类的末尾添加:
    ActiveRecord::SessionStore::Session.table\u name='user\u sessions'
重新启动应用程序,用户会话中存储的任何信息都将保存在authlogic user_sessions表中

后藤:
有关详细信息

如果将
活动记录存储
映射到
authlogic用户会话
表,则会话信息将存储在数据库中,并且您将能够存储更大的数据集

在配置文件夹中:
config/initializers/session\u store.rb

  • 注释掉App::Application.config.session\u store:cookie\u store,:key=>“\u App\u session”
  • 添加或取消注释
    App::Application.config.session\u存储:活动\u记录\u存储
  • config/application.rb的内部

    • 在应用程序类的末尾添加:
      ActiveRecord::SessionStore::Session.table\u name='user\u sessions'
    重新启动应用程序,用户会话中存储的任何信息都将保存在authlogic user_sessions表中

    后藤:
    想了解更多信息,我今天遇到了这个问题。在我的例子中,它最终与CSRF令牌相关

    我们正在应用程序中创建一个用户和会话,以响应OAuth回调。如果CSRF令牌无效(来自第三方时会出现这种情况),authlogic将不会创建用户会话

    无法验证CSRF令牌的真实性

    解决方法很简单:

    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
    
    class Oauth::UserSessionController
    我今天遇到了这个问题。在我的例子中,它最终与CSRF令牌相关

    我们正在应用程序中创建一个用户和会话,以响应OAuth回调。如果CSRF令牌无效(来自第三方时会出现这种情况),authlogic将不会创建用户会话

    无法验证CSRF令牌的真实性

    解决方法很简单:

    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
    
    class Oauth::UserSessionController
    不!仍然是相同的结果“}>我实际上保存了用户对象,而没有经过authlogic验证,比如@user.save(false)obv