【发布时间】:2011-05-26 14:35:26
【问题描述】:
对于我最近的项目,我使用的是https://github.com/hassox/rails_warden。它非常适合我的需求,只是我找不到实现 remember_me 的好方法。我知道从安全的角度来看,要记住我是出了名的困难,所以我希望有一个项目可以完成这项工作。有人看到了什么或有一个好主意吗?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 remember-me warden
对于我最近的项目,我使用的是https://github.com/hassox/rails_warden。它非常适合我的需求,只是我找不到实现 remember_me 的好方法。我知道从安全的角度来看,要记住我是出了名的困难,所以我希望有一个项目可以完成这项工作。有人看到了什么或有一个好主意吗?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 remember-me warden
好的,这就是我的解决方法
# User model must have remember_token attribute
# in config.ru
use Rack::Cookies
run MyApp
# in lib/strategies.rb
Strategies.add(:cookie) do
def valid?
env['rack.cookies']['user.remember.token']
end
def authenticate!
if user = User.find_by_remember_token(cookies['user.remember.token'])
success! user
else
fail! "Could not log in"
end
end
end
Manager.after_authentication :scope => :user do |user, auth, opts|
auth.env['rack.cookies']['user.remember.token'] = user.generate_remember_token! # sets its remember_token attribute to some large random value and returns the value
end
Manager.before_logout :scoper => :user do |user, auth, opts|
user.update_attribute :remember_token, nil
end
【讨论】:
Devise 是 Warden 之上的身份验证解决方案,具有 rememberable 实现。
【讨论】: