这与允许用户在关闭浏览器时保持登录状态的复选框有关。在中间版本中,我们记住了用户,现在我们正在检查参数以查看是否设置了复选框。这是令我困惑的代码行:
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
具体来说,如果params [:session] [:remember_me]为0,为什么我们会忘记用户?由于我们从未想过用户(我认为 - 我是一个主要的新手),不会这样做:
remember(user) if (params[:session][:remember_me] == '1')
并且更有意义?我尝试了它并且它通过了测试(这是非常基本的),但它似乎也表现得恰当。但也许有一些流浪变数因为我不知道自己在做什么而不能保留。
答案 0 :(得分:0)
我正处于完全相同的位置,并且想知道完全相同的事情。
我得出的结论是:它只是关于安全性。
因为如果用户永远不会退出您的应用,那么窃取她user_id
和remember_token
Cookie的攻击者可以一直使用它们。但是,如果用户最终登录到另一台计算机,则remember_digest
属性将获得新值或设置为nil。无论哪种方式,攻击者都会被锁定
通过省略forget(user)
,remember_digest
设置为nil的唯一时间是用户故意注销的时间。
然而,版本remember(user) if (params[:session][:remember_me] == '1')
使用户能够选择一个"记住"计算机。