【问题标题】:Rails devise, find current_user by session_store keyRails 设计,通过 session_store 键找到 current_user
【发布时间】:2018-07-07 13:48:18
【问题描述】:

我们有一个在 Rails 上运行的生产系统(主应用程序),配置了 devise gem(使用 Redis 会话存储)(为所有子域启用会话)

我需要为我们基于子域的微服务之一构建自定义身份验证服务。对于每个请求,此微服务将使用会话 id(rails 会话存储键的 cookie 值)(在 config/initializers/session_store.rb 中配置)调用我们的主应用程序。

所以问题是,我可以仅通过会话 ID 找到用户吗? (使用设计或守望者)

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 authentication devise warden


    【解决方案1】:

    您可以使用 Devise 的 Authenticatable 模块添加到名为 serialize_from_session 的资源中的方法来执行此操作。您可以传入扩展的 Warden 会话变量,其中包括密钥和盐(serialize_from_session 接受这两者作为参数)。例如,如果您在 User 模型上使用 Devise:

    user = User.serialize_from_array(*session['warden.user.user.key'])
    

    session['warden.user.user.key'] 变量是记录 ID(作为数组)和盐的数组。它看起来像[[1], "$2f$23$2DIUF7Vr.J5sbfGwHTew"]

    【讨论】:

    • 感谢您的回答。为此,我需要一个会话对象。但我没有会话对象(Assum inside rails 控制台)。我只有会话 ID。那么如何从 Redis 中找到这个warden 信息呢?
    • 您能说明一下您是如何处理会话的吗? “使用 rails session store key 的 cookie 值调用我们的主应用程序”。我的想法是您可以通过在 Redis 会话存储中查询 cookie 中的键来获取会话数据
    • 很抱歉给您带来了困惑。我更新了问题。现在我通过将您的答案与stackoverflow.com/a/35319202/1866804 合并得到了解决方案,感谢@xavier 的帮助
    猜你喜欢
    • 2013-06-10
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    相关资源
    最近更新 更多