rails教程:cookie与记忆令牌不匹配

我正在做Michael Hartl的Rails教程第8章。当我尝试通过存储在浏览器cookie中的remember_token找到用户时,它无法正常工作。 find_by方法返回NIL。 我一直在尝试通过查看存储在浏览器上的记忆令牌cookie并将其与存储在用户数据库中的记忆令牌进行比较来进行调试。 他们不匹配,我不知道为什么。 这是Session Helper的代码。

module SessionsHelper def sign_in(user) remember_token = User.new_remember_token cookies.permanent[:remember_token] = remember_token user.update_attribute(:remember_token, User.encrypt(remember_token)) self.current_user = user end def signed_in? !current_user.nil? end def current_user=(user) @current_user = user end def current_user #remember_token = User.encrypt(cookies[:remember_token]) remember_token = "71e45660fbaa69bad9fb55b912f80122a584f6af" #@current_user ||= User.find_by(remember_token: remember_token) @current_user ||= User.find_by_remember_token(remember_token) end end 

我一直在调整它以试图弄清楚发生了什么。 为了调试,我注释掉了正常的行并使用我在数据库中看到的值显式设置了记忆标记 – 然后应用程序正常工作。 当我将存储在浏览器中的cookie的值与存储在数据库中的记忆令牌的值进行比较时,它们不匹配。

我注意到的另一件事是我无法调用User_find_by。 我收到一条错误消息,表示它无法识别此方法,因此我对其进行了评论。 但是我可以调用User.find_by_remember_token。 我可能安装了错误版本的东西吗?

我已经尝试重置数据库 – 但我可以看到它,看起来它有所有正确的列。

这是_header.html.erb代码:

  

看起来问题可能是你的SessionsHelper中的第20行。 应该:

 @current_user ||= User.find_by(remember_token: remember_token) 

您没有将记忆标记传递给User.find_by()方法,而是尝试调用不存在的方法find_by_remember_token。

首先, User_find_by()不是方法。 它是User.find()User.find_by_columnName() ,其中columnname是数据库中要搜索的列。

此外,您必须确保正确定义您的User模型。 我假设你按照所有指令直到那一点,所以你有new_remember_tokenencrypt方法,你有create_remember_token私有方法? 还要确保你有before_createfilter。