Rails无法通过auth_token找到用户

时间:2014-06-26 08:56:19

标签: ruby-on-rails ruby-on-rails-3 authentication cookies auth-token

我刚刚开始使用我的rails 3.2.18 app

获得一个相当奇怪的问题

我正在使用Railscasts中描述的cookie验证。在过去的一年里(直到我升级到3.2.18)一切都很顺利。

但是我现在有以下问题。我可以成功登录,并导航到几页。但是,在页面点击次数不确定后,我收到500内部页面错误。在我的生产日志中,我看到以下错误(我已经更改了实际的令牌代码)

ActiveRecord::RecordNotFound (Couldn't find User with auth_token = XXXXXXXXXXXXXX):
  app/controllers/application_controller.rb:28:in `current_user'

当我查看该用户的数据库条目时,我看到了正确的auth_token条目。应用程序控制器中引用的代码行是

@current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]

所以,是的,需要在Rails 4中用一个地方而不是find_by语句来重复这一点,但是,我不认为,应该引起这个问题,初始认证也很奇怪然后几页点击工作,然后它就无法工作。

为了能够再次登录,我必须关闭浏览器会话(我在firefox,safari和IE上都一样),然后重新启动,我可以登录一段时间。

此外,我不会在开发中遇到此问题,仅在生产中

1 个答案:

答案 0 :(得分:2)

最后我将find_by查询更改为where查询,如下所示

原始

@current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]

@current_user ||= User.where("auth_token =?", cookies[:auth_token]).first if cookies[:auth_token]

这似乎已经解决了问题。我认为find_by在Rails 4中被删除了,但显然有些事情并不完全是幸福的。