【问题标题】:Adding data to a Devise session将数据添加到设计会话
【发布时间】:2014-07-04 15:18:46
【问题描述】:

我正在使用 Rails 4,并希望向 Devise/Warden 在登录时创建的会话添加更多数据。

user_id 存储在 ["warden.user.user.key"] 中,但我还想添加用户的电子邮件和用户名。

这是相关的,但与我想做的相反:How to access session from Warden/Devise after_authentication callback in Rails

【问题讨论】:

    标签: ruby-on-rails-4 devise warden


    【解决方案1】:

    我通过将其添加到我的 config/initializers/devise.rb 文件中解决了这个问题。不确定这是否安全或正确的方法,但它确实有效。

    Warden::Manager.after_authentication do |user,auth,opts|
      auth.raw_session['warden.user.user.email'] = user.email
      auth.raw_session['warden.user.user.username'] = user.username
    end
    

    【讨论】:

      【解决方案2】:

      通常您会为此使用 Warden 序列化程序,正如我在 Warden guide 中提到的那样:

      config.middleware.use Warden::Manager do |manager|
        manager.default_strategies :password
      
        manager.serialize_into_session do |user|
          user.id
        end
      
        manager.serialize_from_session do |id|
          User.find(id)
        end
      end
      

      那么当你想获取用户的信息时:

      env['warden'].user.email
      env['warden'].user.username
      

      这也使您能够获得更多信息,或者根据需要对对象采取行动。

      【讨论】:

      • 首先感谢您的回复瑞恩!不过,我不确定这是否适合我的目的。我正在解密在另一个轨道应用程序(我们称之为 app1)中创建的会话,在另一个应用程序 2 的子域中。解密 app1 的 cookie["_app1_session"] 后,我看到它只包含 Warden 的序列化 user_id 信息。我在这里按照本指南解密会话:big-elephants.com/2014-01/handling-rails-4-sessions-with-go。我指的是应用程序会话,而不是设计会话,很抱歉造成混淆。我上面的回答有效,但有味道吗?
      猜你喜欢
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      相关资源
      最近更新 更多