Ruby on rails &引用;Rails by Example“;身份验证实现
在Michael Hart的书中,此代码用于实现身份验证:Ruby on rails &引用;Rails by Example“;身份验证实现,ruby-on-rails,ruby-on-rails-3,session,authentication,cookies,Ruby On Rails,Ruby On Rails 3,Session,Authentication,Cookies,在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.sa
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
它的工作做得很好,我可以登录无限的时间,或为一个有限的时间,我希望。
但它也有一个缺点,cookies存储在客户端,即使浏览器关闭,cookies也不会消失
现在我想知道,由于rails会话在浏览器关闭后会被破坏,我如何将它们与此处提供的cookie结合起来,以实现具有以下特征的身份验证:
--如果用户登录,
数据应存储在会话中
这样在用户关闭浏览器后,他们就可以登录
--如果用户登录,则选中“记住我”复选框
他们的数据应该存储在一个有效期很长的cookie中
对于这一点,我们将采取什么样的方式来保持安全和简单?
我在网上搜索了一下,发现最近没有什么东西(Rails 3)能证明这一点
可以指引我正确的方向。
我正在考虑为会话和cookie创建两个单独的模块,并在控制器中激发它们各自的sign_-in方法,无论是否存在memory_-me参数,但这似乎有很多重复
PS我不是在寻找任何认证宝石来提供这一功能,我宁愿自己实现它
谢谢我意识到你说你不是在寻找认证宝石,如果你只是想学习如何做这类事情,这很好。但是,如果您计划在生产中使用此解决方案,我非常建议您出于安全目的使用已建立的解决方案。您可以在github上查看一些可用的解决方案源代码,以找到可能的解决方案