【问题标题】:Using devise "rememberable" without cookies使用没有 cookie 的“可记忆”设计
【发布时间】:2010-11-01 18:09:14
【问题描述】:

我有一个使用 devise 来管理用户的 Rails 站点。对于会话管理,我使用 devise 的 rememberable 策略,它存储和检索用户 cookie 中的加密身份验证信息。

我正在实现一个使用 Flash 的多照片上传小部件。 Flash 不支持随请求一起发送 cookie。这是多个多次上传flash+javascript库的问题,因此修复这个缺点可能是不可行的。

所以我的问题是:我能否在不使用 cookie 的情况下成功验证设计/可记忆的?如果有,怎么做?

更多详情

设计/记忆取决于 cookie 中 remember_token 的值。如果我可以欺骗 Rails 认为该值是作为 cookie 提供的(例如request.cookies['remember_token'] = '...'),我的问题就会得到解决。 Devise/rememberable 会在那里找到正确的值,解压它,并成功验证。但是,request.cookies 哈希显然是只读的。写入散列会被静默忽略。示例(来自传入 POST 请求的调试控制台):

>> request.cookies['remember_token'] = 'a string'
=> "a string"
>> request.cookies['remember_token']
=> nil
>> request.cookies
=> {}

我正在使用(或尝试使用)FancyUpload v3 小部件。

【问题讨论】:

  • 我正在寻找类似但不同的东西 - 一种设置像 remember_token 这样的 cookie 但用于不记得我的登录的方法,以使应用间登录共享更容易。碰到你的问题。

标签: ruby-on-rails flash cookies file-upload devise


【解决方案1】:

稍微覆盖一下 Devise 怎么样?

基于 Devise 1.2.rc,这样的东西应该可以工作:

module Devise
  module Strategies
    class Rememberable
      def remember_cookie
        # your code to get the hashed value from the request
      end
    end
  end
end

或者,您可以添加一个新的(子类)策略:

module Devise
  module Strategies
    class RememberableParameter < Rememberable
      def remember_cookie
        # your code to get the hashed value from the request
      end
    end
  end
end
Warden::Strategies.add(:rememberable_parameter, Devise::Strategies::Rememberable)

或者,查看 Token Authenticatable:

Token Authenticatable:基于身份验证令牌(也称为 “单一访问令牌”)。令牌既可以通过查询字符串给出,也可以通过 HTTP 基本身份验证

这里有更多关于它的信息: https://github.com/plataformatec/devise/blob/master/lib/devise/models/token_authenticatable.rb

祝你好运!

【讨论】:

  • 谢谢,保罗。由于源代码控制管理问题,我不想覆盖 Devise,但令牌可验证策略效果很好。现在我只需要为所有其他操作关闭基于令牌的身份验证。 :-) 感谢您的帮助。
猜你喜欢
  • 2012-08-02
  • 2011-07-30
  • 1970-01-01
  • 2013-01-14
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多