我刚刚开始使用我的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上都一样),然后重新启动,我可以登录一段时间。
此外,我不会在开发中遇到此问题,仅在生产中
答案 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中被删除了,但显然有些事情并不完全是幸福的。