在Michael Hart的书中,这段代码用于实现身份验证:
module SessionsHelper
def sign_in(user)
cookies.permanent.signed[:remember_token] = [user.id, user.salt] #permanent
# -alternatively-
# cookies.signed[:remember_token]={
# :value => [user.id, user.salt],
# expires => some_time.from_now
# }
current_user = user
end
def current_user=(user)
@current_user = user
end
def current_user
return @current_user ||= user_from_remember_token
end
private
def user_from_remember_token
#passes array of length two as a parameter -- first slot contains ID,
#second contains SALT for encryption
User.authenticate_with_salt(*remember_token)
end
def remember_token
#ensures return of a double array in the event that
#cookies.signed[:remember_token] is nil.
cookies.signed[:remember_token] || [nil,nil]
end
end
它的工作非常好,我可以登录无限的时间,也可以按照我的意愿在有限的时间内登录。 但它有一个缺点,cookie存储在客户端上,即使浏览器关闭它们也不会消失
现在我想知道,因为在浏览器关闭后rails会话被破坏了,我如何将它们和这里提供的cookie结合起来实现具有以下特征的身份验证:
- 如果用户登录, 数据应存储在会话中 因此,在用户关闭浏览器后,他们会记录
- 如果用户登录,则选中“记住我”复选框 他们的数据应该存储在一个有很长失效日期的cookie中
对此采取什么措施仍然安全而简单? 我在网上搜索,没有发现任何最近的内容(Rails 3) 可以引导我朝着正确的方向前进。 我正在考虑为会话和cookie创建2个单独的模块,并在控制器中触发它们各自的sign_in方法是否存在remember_me param,但这看起来有很多重复。
PS我没有调查任何身份验证宝石以提供此功能,我更喜欢自己实现它。
由于