使用没有cookie的设计“可记住”

时间:2010-11-01 18:09:15

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

我有一个工作的Rails网站,使用devise来管理用户。对于会话管理,我使用的是设计rememberable策略,该策略存储并从用户的cookie中检索加密的身份验证信息。

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

所以我的问题是:我可以成功验证设计/记住而不使用cookies 吗?如果是这样,怎么样?

更多详情

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

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

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

1 个答案:

答案 0 :(得分:3)

稍微超越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

祝你好运!