Ruby on rails 轨道5+;设计:ActionController::InvalidAuthenticationToken

Ruby on rails 轨道5+;设计:ActionController::InvalidAuthenticationToken,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我用Rails 5和Desive创建了一个新的应用程序,设置了身份验证,几周内一切正常 今天,我尝试登录生产服务器,但出现以下错误: ActionController::InvalidAuthenticityToken: ActionController::InvalidAuthenticityToken NoMethodError: undefined method `listings' for nil:NilClass 在谷歌搜索之后,我发现我需要做以下改变: class Applica

我用Rails 5和Desive创建了一个新的应用程序,设置了身份验证,几周内一切正常

今天,我尝试登录生产服务器,但出现以下错误:

ActionController::InvalidAuthenticityToken: ActionController::InvalidAuthenticityToken
NoMethodError: undefined method `listings' for nil:NilClass
在谷歌搜索之后,我发现我需要做以下改变:

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
我看看这里的问题是什么,然后:

@listings = current_user.listings.order('id DESC')
这意味着当前用户是空的(
nil
)--为什么?此外,我在网站的
标签中有以下内容:

 <%= csrf_meta_tags %>

另一个注意事项是,在localhost上,一切正常,但在生产服务器上,我不断收到这些错误消息

有什么建议吗


谢谢大家!

您需要在\u操作之前设置
:验证\u用户当前用户
工作,请在控制器中进行code>。
我猜它为您在localhost上工作的原因是您在会话中设置了当前用户。我认为如果你尝试隐姓埋名,它不会起作用。

你需要在操作:验证用户之前设置
当前用户
工作,请在控制器中进行code>。
我猜它为您在localhost上工作的原因是您在会话中设置了当前用户。我认为如果你尝试以匿名的方式登录,它不起作用。

我尝试过这个-看起来当我设置
protect\u from\u forgery prepend:true
,那么生产中的应用程序看不到用户登录。我想这可能是因为你正在使用
prepend:true
,尝试切换回
protect\u from\u fackery with:exception
以及
,然后执行以下操作:验证用户回调。我有一个带有这些选项的rails 5.1应用程序,它在生产环境中正常运行。我尝试过这一点-当我设置
protect\u from\u forgery prepend:true
,那么生产环境中的应用程序看不到用户登录。我想这可能是因为您使用的是
prepend:true
,尝试切换回
protect\u from\u fackery with:exception
以及
,然后执行以下操作:验证用户回调。我有一个带有这些选项的rails 5.1应用程序,它在生产中正常运行。