【问题标题】:Rails Couldn't find user with auth_tokenRails 找不到具有 auth_token 的用户
【发布时间】:2014-08-17 01:24:30
【问题描述】:

我的 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 上都有相同的会话),然后重新启动,我可以登录一段时间。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我们最近在 rails 3.2.12 中遇到了完全相同的问题。你知道是什么导致了这个问题吗?
    • 您是否尝试使用 find_by_auth_token()? (没有!)
    • 我没有尝试没有爆炸(!),是更快乐的用户在哪里查询。我并没有真正找到原因,但很高兴转向解决问题的 where 语句,并且更适合转向 Rails 4
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多