在Hartl的教程,清单8.49中,为什么会出现"忘记(用户)"选项?

时间:2015-11-21 22:43:24

标签: railstutorial.org

这与允许用户在关闭浏览器时保持登录状态的复选框有关。在中间版本中,我们记住了用户,现在我们正在检查参数以查看是否设置了复选框。这是令我困惑的代码行:

params[:session][:remember_me] == '1' ? remember(user) : forget(user)

具体来说,如果params [:session] [:remember_me]为0,为什么我们会忘记用户?由于我们从未想过用户(我认为 - 我是一个主要的新手),不会这样做:

remember(user) if (params[:session][:remember_me] == '1')

并且更有意义?我尝试了它并且它通过了测试(这是非常基本的),但它似乎也表现得恰当。但也许有一些流浪变数因为我不知道自己在做什么而不能保留。

1 个答案:

答案 0 :(得分:0)

我正处于完全相同的位置,并且想知道完全相同的事情。

我得出的结论是:它只是关于安全性。
因为如果用户永远不会退出您的应用,那么窃取她user_idremember_token Cookie的攻击者可以一直使用它们。但是,如果用户最终登录到另一台计算机,则remember_digest属性将获得新值或设置为nil。无论哪种方式,攻击者都会被锁定 通过省略forget(user)remember_digest设置为nil的唯一时间是用户故意注销的时间。

然而,版本remember(user) if (params[:session][:remember_me] == '1')使用户能够选择一个"记住"计算机。