我有一个工作的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小部件。
答案 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
祝你好运!