我有一个Rails应用程序,它使用Devise和activerecord-session_store gem,并采用最低限度的设置(除了默认设置之外没有什么).

我正在try 使用存储在cookie中的值在activerecord-ession_store使用的sessions表中手动查找相应的会话记录.

问题是,我从Cookie中获得的会话值似乎没有"按原样"存储在数据库中,因此我不能简单地执行Find_By来查找它匹配的记录.

或者换句话说:

Cookie值如下所示: A5a879b4f923d2eea7707cf8ce28cd80

这是sessions榜单中的session_id名的样子: 2::801e4371783f192b4ee95be9def08bf17daaa1ebeed589dbdfeeb8742e2dd9f6

sessions表中的值似乎被加密了,我找不到如何匹配这两个值的信息.

值得一提的是,这款应用程序运行正常,因此它以某种方式在内部进行匹配.我正在try 为不同的用例匹配会话ID.

我曾try 使用ActiveRecord::SessionStore::Session公开的find_by_session_id方法,希望它能进行一些转换并神奇地找到正确的会话,但它似乎只是活动记录中的标准Find_By,因为字符串值不同,所以不起作用.

我的猜测是,我需要以某种方式将来自cookie的值转换为将数据保存在会话id列中的格式,然后才执行findby,但我不确定如何进行.

您知道如何使用Cookie值找到正确的会话吗?谢谢

推荐答案

虽然我不能提供这是如何以及为什么工作的细节,但我想出了一个解决方案:

首先,需要从cookie值中的值生成私有_会话_id,然后才能调用find_by_session_id.

大概是这样的:

private_session_id = Rack::Session::SessionId.new(COOKIE_VALUE).private_id. ActiveRecord::SessionStore::Session.find_by_session_id(private_session_id).

Ruby-on-rails相关问答推荐

我使用rbenv安装Ruby,但我在使用";gem";->;错误:执行gem时遇到此错误.(Errno::EACCES)权限被拒绝

错误AESGCMOpen获取密码:消息身份验证失败:Golang解密GCM

将参数传递给视图中的嵌入操作时遇到问题

Trailblazor 操作 -> 集合 :attribute(has_many 通过关联) 与填充器 -> 如何填充 Reform::Form 形式的 slugs 数组?

在bash中匹配带有空格字符的字符串

如何在 Arel 中重用单个绑定变量?

Rails 和 jsonb 类型jsonb不存在

ActiveRecord 回调列表

File.open,写入和保存?

Ruby on Rails 取消首字母大写

基于 2 列定义唯一主键

用 url_for 查询参数?

Rails 4 迁移:如何重新排序列

通过字符串获取 ActiveRecord 对象的属性

Rails 3. 构建 oauth2 提供程序

rails回形针和乘客`'识别'命令无法识别`

登录delay_job?

为什么 Ruby on Rails 使用 http://0.0.0.0:3000 而不是 http://localhost:3000?

如果多态关联的类型列不指向 STI 的基本模型,为什么多态关联对 STI 不起作用?

无论何时 gem 在 Heroku 上运行 cron 作业(job)