Rails 5 + Devise:ActionController :: InvalidAuthenticityToken

时间:2017-08-06 09:18:22

标签: ruby-on-rails ruby devise

我使用Rails 5和Devise创建了一个新的应用程序,设置了身份验证,一切都运行了好几周。

今天,我尝试登录生产服务器并收到此错误:

ActionController::InvalidAuthenticityToken: ActionController::InvalidAuthenticityToken

经过一些谷歌搜索,我发现我需要做这个改变:

class ApplicationController < ActionController::Base
  #protect_from_forgery with: :exception # because of Devise + Rails 5 behavior
  protect_from_forgery prepend: true  

  def after_sign_in_path_for(resource_or_scope)
    my_listings_path
  end

  def after_sign_out_path_for(resource_or_scope)
    root_path
  end  
end

在生产服务器上进行此更改并部署后,我尝试登录 - 并出现错误。但是另一个 - 现在应用程序重定向我my_listings_path(这是正确的),但问题是我收到此错误:

NoMethodError: undefined method `listings' for nil:NilClass

所以我看看这里有什么问题,并且:

@listings = current_user.listings.order('id DESC')

这意味着current_user为空(nil) - 为什么会这样?另外,我在网站上的<head>标记中显示:

 <%= csrf_meta_tags %>

另一个注意事项 - 在localhost上,一切运行良好,但在生产服务器上,我一直收到这些错误消息。

有任何建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您希望before_action :authenticate_user!正常工作,则需要在控制器中设置current_user。  我猜测它为你工作localhost的原因是因为你在某个会话中设置了current_user。如果您尝试隐身,我认为它无效。