Rails 设计,通过 session_store 键找到 current_user
Posted
技术标签:
【中文标题】Rails 设计,通过 session_store 键找到 current_user【英文标题】:Rails devise, find current_user by session_store key 【发布时间】:2018-07-07 13:48:18 【问题描述】:我们有一个在 Rails 上运行的生产系统(主应用程序),配置了 devise gem(使用 Redis 会话存储)(为所有子域启用会话)
我需要为我们基于子域的微服务之一构建自定义身份验证服务。对于每个请求,此微服务将使用会话 id(rails 会话存储键的 cookie 值)(在 config/initializers/session_store.rb 中配置)调用我们的主应用程序。
所以问题是,我可以仅通过会话 ID 找到用户吗? (使用设计或守望者)
【问题讨论】:
【参考方案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 中的键来获取会话数据 很抱歉给您带来了困惑。我更新了问题。现在我通过将您的答案与***.com/a/35319202/1866804 合并得到了解决方案,感谢@xavier 的帮助以上是关于Rails 设计,通过 session_store 键找到 current_user的主要内容,如果未能解决你的问题,请参考以下文章
rails session_store 由cookie_store改为active_record_store,sidekiq页面进入后session消失