2

我的 rails 3.2.18 应用程序刚开始遇到一个相当奇怪的问题

我正在使用 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]

所以是的,需要用 where 而不是 find_by 语句来替换它,以便在 Rails 4 中工作,但是我认为这不应该导致问题,初始身份验证和几页也很奇怪点击工作,然后它不起作用。

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

另外我在开发中没有这个问题,只有在生产中

4

1 回答 1

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 中被贬低了,但显然有些事情并不完全令人满意。

于 2014-06-27T08:35:07.793 回答