我正在阅读 Railstutorial.org 上的教程,并通过测试完成了第 8 章。我的问题是,如果我完全按照指南的代码进行操作,我可以登录,但无法注销。
如果我单击“注销”,我将被重定向到 root_path,但仍然是登录的成员。
我想我将这种行为追溯到我的会话助手。具体如下几行:
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
通过 rails 控制台和 pry,我能够确定 cookies[:remember_token] 为 nil,但由于我的用户的 remember_token 也是 nil,所以 find_by_remember_token 说:“嘿 nil == nil!太好了!我们找到了我们的用户!” 除了这显然不是理想的行为。
我通过将 current_user 方法更改为以下内容来修复它:
def current_user
@current_user ||= cookies[:remember_token] && User.find_by_remember_token(cookies[:remember_token])
end
我完全接受并理解这可能是我的代码中的错误。我从项目中的这一点找到了 Michael Hartl 的提交,并比较了我们的文件,找不到差异。关于这里可能发生的事情的任何想法?
感谢您的时间。