ruby - 从设备/管理员 session cookie 中获取用户

标签 ruby ruby-on-rails-4 devise session-cookies warden

我需要手动反序列化 session cookie 以从中提取用户。环境是rails,虽然它不在http服务器上下文中,所以没有要求设计自动反序列化。有 Warden::SessionSerializer,虽然我并没有真正了解如何使用它。

在我没有使用 Devise 之前,我使用这种方法反序列化 Rails session cookie:

def decrypt_cookie(cookie)
  cookie = CGI.unescape(cookie)
  config = Rails.application.config

  encrypted_cookie_salt = config.action_dispatch.encrypted_cookie_salt
  encrypted_signed_cookie_salt = config.action_dispatch.encrypted_signed_cookie_salt

  key_generator = ActiveSupport::KeyGenerator.new(config.secret_key_base, iterations: 1000)
  secret = key_generator.generate_key(encrypted_cookie_salt)
  sign_secret = key_generator.generate_key(encrypted_signed_cookie_salt)

  encryptor = ActiveSupport::MessageEncryptor.new(secret, sign_secret)
  encryptor.decrypt_and_verify(cookie)
end

因为有些人可能怀疑是否存在手动反序列化 cookie 的上下文是否合适: 客户端(浏览器)通过 HTTP 进行身份验证, session 当然存储在 cookie 中。 Rails 还运行 (rails runner) 响应某些特权操作的 websocket 服务器。对于这些,我需要(重新)验证用户。如果有人看到不同的(更好的)方法,我很乐意阅读它。 :)

最佳答案

我描述的反序列化 cookie 的方式是正确的。在 Devise 中实际上是一样的,键只是改变了,我很快就得出结论,一定有一个不同的序列化过程在进行。

关于ruby - 从设备/管理员 session cookie 中获取用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26962593/

相关文章:

sql - 使用 Rails 在 Postgres 中开发自定义函数

ruby-on-rails - 在 Rails 中创建同名表单元素时的非唯一 ID

ruby-on-rails - 未定义方法 'user' 为 nil :nilClass

javascript - 为什么这个 JS 会触发部分呈现在一页上而不是另一页上的表单?

ruby-on-rails - 没有路线匹配 [GET] "/users/sign_out"rails 5

ruby-on-rails - 无法将自定义字段添加到 Ruby on Rails 中的 Devise 模型。私有(private)方法错误

ruby-on-rails - 在运行 Rails 3.1 的 Ubuntu 14.04 上运行 sidekiq 会出现 "Segmentation fault"错误

ruby-on-rails - 使用 Facebook Graph API 查找用户的好友

ruby-on-rails - 在 Ruby on Rails 中为 Rspec 和 Rack::Test 设置请求 header

ruby - Ruby 中的有限矩阵