获取ActionController :: InvalidAuthenticityToken(ActionController :: InvalidAuthenticityToken)错误设计登录并注册

时间:2016-02-03 07:44:08

标签: ruby-on-rails heroku devise

我知道有很多帖子与此错误相关但仍然......

我在登录/注册设计时遇到以下错误。 (2天后,它能够很好地演唱/上演。)

Feb 02 22:16:12 myapp app/web.1:  Processing by Devise::SessionsController#create as HTML 
Feb 02 22:16:12 myapp app/web.1:    Parameters: {"utf8"=>"✓", "authenticity_token"=>"d0R529vsmCovMKZk1RC9ioxfVHivvVGKxPFvNkEUqVId08qPMDRN0lu9yULIAaTJR+p1oOXyg8QsE+PdZx4CHg==", "user"=>{"app_name"=>"tempo", "email"=>"xyz@vision.com", "password"=>"[FILTERED]"}, "commit"=>"submit"} 
Feb 02 22:16:12 myapp app/web.1:  Can't verify CSRF token authenticity 
Feb 02 22:16:12 myapp app/web.1:  ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken): 
Feb 02 22:16:12 myapp app/web.1:    vendor/bundle/ruby/2.2.0/gems/actionpack-4.2.1/lib/action_controller/metal/request_forgery_protection.rb:181:in `handle_unverified_request' 
Feb 02 22:16:12 myapp app/web.1:    vendor/bundle/ruby/2.2.0/gems/actionpack-4.2.1/lib/action_controller/metal/request_forgery_protection.rb:209:in `handle_unverified_request' 
Feb 02 22:16:12 myapp app/web.1:    vendor/bundle/ruby/2.2.0/gems/devise-3.5.6/lib/devise/controllers/helpers.rb:257:in `handle_unverified_request' 
Feb 02 22:16:12 myapp app/web.1:    vendor/bundle/ruby/2.2.0/gems/actionpack-4.2.1/lib/action_controller/metal/request_forgery_protection.rb:204:in `verify_authenticity_token' 

我收到了Heroku上托管的生产应用程序的错误。

我有一个临时应用程序(也在heroku上托管并且具有相同的代码库)并且它运行正常。

我可以登录并注册。

我已经提到了以下链接但是遇到了同样的问题

Rails facebook app returns 422 " the change u wanted was rejected" error

devise user sign_in gives authentication error for CSRF token authenticity token

rails - "WARNING: Can't verify CSRF token authenticity" for json devise requests

https://github.com/plataformatec/devise/issues/2734

我正在使用rails 4。

修改

我已经厌倦了以下解决方案

  • 从应用程序控制器中删除了protect_from_forgery
  • 检查布局中是否存在csrf_meta_tags,并且它存在。
  • 同时从表单中检查authenticity_token。您可以在日志跟踪中找到我提交的表单详细信息。
  • 在应用程序控制器中添加了以下内容

    skip_before_filter:verify_authenticity_token,if :: devise_controller?

2 个答案:

答案 0 :(得分:2)

这是网络问题。我们的网络管理员对防火墙进行了一些更改,这就是导致问题的原因。它也影响其他网站

答案 1 :(得分:1)

这可能是一些事情......

<强> 1。您忘了在布局文件中添加<%= csrf_meta_tags %>

<!DOCTYPE html>
<html>
  <head>
    <title>Sample</title>
    <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
    <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
    <%= csrf_meta_tags %>
  </head>
  <body>  
    <%= yield %>
  </body>
</html>

<强> 2。您需要将protect_from_forgery设置为以下内容:

简单地声明protect_from_forgery而不使用:with参数将默认使用:null_session:

protect_from_forgery # Same as above

第3。 Devise的作者建议在引发此异常的特定控制器操作上禁用protect_from_forgery:

# app/controllers/users/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
  skip_before_filter :verify_authenticity_token, :only => :create
end

<强> 4。您需要在表单中添加以下行

<%= hidden_field_tag :authenticity_token, form_authenticity_token -%>