Uts*_*ani 4 ruby cookies ruby-on-rails devise ruby-on-rails-3
我正在使用 Devise-1.5.4 和 Rails 3.0.20。以下是我所了解的事实:
current_user,authenticate_user!来验证用户。authenticate!,它本身调用serialize_from_cookie,用于remember_token对用户进行身份验证。我对session_id的用法有点困惑。
remember_token)时会发生什么?devise 如何验证 current_user?顾名思义,会话cookie仅对当前浏览器会话有效,即如果浏览器退出并重新打开,则该cookie不可用(除非您执行恢复会话之类的操作,在这种情况下,浏览器会恢复上一个会话中的cookie) 。
请记住 cookie,以便将登录时间延长到当前会话之后。
Devise 使用 Warden,其工作方式是:
1) Devise 向 Warden 注册多个策略 - 即:基于会话密钥的身份验证、来自参数的身份验证、来自记住令牌的身份验证等。
2) 当请求传入 Warden 时,运行其中的每一个策略
3) 如果任何一个策略成功验证请求Warden 设置“用户”(稍后通过 current_user 辅助方法获得)并停止运行后续策略
4) 如果没有一个策略成功,则声明当前没有用户登录(并且 current_user 将返回 nil)
因此,在您的情况下,如果设置了 session_id (即密钥warden.user.user.key设置为有效的用户 ID),则基于会话的身份验证策略会成功,并且用户被视为已登录。如果该会话不可用,则典狱长将继续执行下一个策略并随后到达“auth from Remember_token”策略。该策略检查记住 cookie 是否存在。如果存在,则从该 cookie 获取令牌,验证它是否仍然有效且未过期。如果是这样,则它设置“用户”并且用户被视为已登录。如果令牌再次过期,则用户被视为未登录。
如果登录时用户未选择 Remember_me,则记住令牌不会设置在记住 cookie 中。在这种情况下,如果用户关闭浏览器并再次打开它(不恢复之前的会话),则用户将不再登录到您的系统。
阅读 Warden 文档和 Warden 代码对于理解整个流程非常有帮助。您可以在典狱长代码中放入调试打印/日志行并运行您的应用程序以了解所有这些是如何工作的。
| 归档时间: |
|
| 查看次数: |
2284 次 |
| 最近记录: |