Rails教程多个登录

时间:2014-09-09 13:28:32

标签: ruby-on-rails ruby basic-authentication

我构建了一个小新闻阅读器并通过Michael Hartl的Rails Tutorial进行身份验证。我想添加这个功能,这样多个人可以同时登录,基本上我想分享记忆令牌吗?

以下是sessions_helper.rb文件的样子:

def sign_in(user)
  remember_token = User.new_remember_token
  cookies.permanent[:remember_token] = remember_token
  user.update_attribute(:remember_token, User.digest(remember_token))
  self.current_user = user
end

据我所知,似乎发生的事情是当用户登录时会生成一个新令牌,这会消除旧令牌。

幸运的是,这不是需要保护的东西,所以我不一定需要在每次登录时生成一个新的,我可以保持相同的令牌数周。

最终目标是能够从我的工作计算机以及个人计算机登录,而不必每次都登录。

我很感激任何指导,我是Rails的新手,但我真的非常喜欢它并且很好地接受它。

干杯!

1 个答案:

答案 0 :(得分:0)

我不太确定多次登录和共享remember_token的含义。你是说很多人分享同一个账户?

为了帮助澄清本教程中的登录机制,Hartl提供了两种不同类型的身份验证。 第一个使用称为会话的临时cookie,一旦关闭浏览器就会过期,因此您将自动退出应用程序。

第二个系统使用半永久性cookie在第一个系统的顶部添加一个图层。如果您填写登录信息并检查“记住我”切换,则会调用第二种机制,即remember_token(这是您所指的)生成并在浏览器中作为cookie缓存,并进行散列并保存在数据库为remember_digest列。因此,即使您关闭浏览器并返回,浏览器中存储的半永久性cookie(remember_token)也会被哈希并与数据库中的remember_digest进行比较,并在您匹配时保持登录状态。每次显式注销并重新登录时,都会生成一个新的remember_token并进行散列并存储在数据库中。

因此,按照本教程,您有两种方法可以实现身份验证:

1)只使用临时cookie,不需要remember_token和remember_digest(数据库)。

2)使用临时cookie和半永久性,这需要命中数据库。