Ruby 从设备/管理员会话cookie获取用户

Ruby 从设备/管理员会话cookie获取用户,ruby,ruby-on-rails-4,devise,session-cookies,warden,Ruby,Ruby On Rails 4,Devise,Session Cookies,Warden,我需要手动反序列化会话cookie以从中提取用户。环境是rails,尽管它不在http服务器上下文中,所以没有要求Desive自动反序列化。还有Warden::SessionSerializer,尽管我不知道如何使用它 在我没有使用Desive之前,我使用此方法来反序列化rails会话cookie: def decrypt_cookie(cookie) cookie=CGI.unescape(cookie) config=Rails.application.config 加密的\u cookie

我需要手动反序列化会话cookie以从中提取用户。环境是rails,尽管它不在http服务器上下文中,所以没有要求Desive自动反序列化。还有Warden::SessionSerializer,尽管我不知道如何使用它

在我没有使用Desive之前,我使用此方法来反序列化rails会话cookie:

def decrypt_cookie(cookie)
cookie=CGI.unescape(cookie)
config=Rails.application.config
加密的\u cookie\u salt=config.action\u dispatch.encrypted\u cookie\u salt
加密的\u签名的\u cookie\u salt=config.action\u dispatch.encrypted的\u签名的\u cookie\u salt
key\u generator=ActiveSupport::KeyGenerator.new(config.secret\u key\u base,迭代次数:1000)
secret=密钥\u生成器。生成密钥(加密的\u cookie\u salt)
sign\u secret=密钥生成器。生成密钥(加密的\u签名的\u cookie\u salt)
encryptor=ActiveSupport::MessageEncryptor.new(secret,sign\u secret)
加密程序。解密和验证(cookie)
结束
因为有些人可能会怀疑是否存在手动反序列化cookie的适当环境:
客户端(浏览器)通过HTTP进行身份验证,会话当然存储在cookie中。Rails还运行(Rails runner)响应某些特权操作的websocket服务器。对于这些,我需要(重新)验证用户。如果有人看到一种不同的(更好的)方法,我很乐意阅读

您可以访问控制器中的
会话
对象。您使用什么键来存储用户id?您应该能够执行
session[:key]
,因此如果您将id存储为user\u id,那么
session[:user\u id]
,我描述的反序列化cookie的方法就是正确的方法。实际上,Deave中的键是一样的,只是换了键,我很快得出结论,一定有不同的序列化过程在进行。

你必须使用Deave吗?我建议你使用典狱长来滚动你自己的令牌认证,你可以完全控制它。如果您决定像我一样只做简单的事情,自己实现auth,您将看到通过模型从令牌查找用户很容易。

虽然我以Rails脚本启动脚本(因此加载了常规环境),但它不在控制器内,所以Deave没有为我做任何反序列化。如果你可以访问Warden对象(我假设你可以在脚本中访问,因为你有问题),那么你可以使用
{Warden_instance}.request.session
我相信也没有请求,它是从非http上下文启动的。如果没有请求,你如何拥有会话?会话是如何/何时创建的?在另一个上下文中,还有一个正在运行的rails http服务器,在其中创建会话。但是在脚本的上下文中,我只有cookie。是的,谢谢,但是需要设计。我写我自己的确认/重置/。。。逻辑,但我喜欢Desive处理它的方式。