如何修复Rails中的'ActionController :: InvalidAuthenticityToken'错误

时间:2019-01-25 23:30:16

标签: ruby-on-rails ruby csrf

我正在以远程Nginx服务器上托管的Rails 5.2在开发模式下运行应用程序。当我尝试使用Firefox或Microsoft Edge发布或删除记录时,一切正常,但是当我使用Chrome时,我从Rails收到了“ ActionController :: InvalidAuthenticityToken”错误。

在过去的几个小时中,我一直在研究此问题,但找不到与我有相同问题的人。本地一切正常,但是当我将更改推送到远程(开发)服务器时,遇到了一些问题。

Rails 5 ActionController::InvalidAuthenticityToken errorActionController::InvalidAuthenticityToken

参考上述两个问题,我将以下代码添加到application_controller.rb

skip_before_action :verify_authenticity_token
protect_from_forgery prepend: true, with: :exception

但是错误仍然存​​在。

应用程序控制器

#application_controller.rb
class ApplicationController < ActionController::Base
  skip_before_action :verify_authenticity_token
  protect_from_forgery prepend: true, with: :exception
end

提交后导致错误的表格

   <%= form_for service_line_item, url: services_edit_line_item_path(service_line_item_id: service_line_item.id), html: {class: 'collapse services-form edit-service-line-item-form'} do |f| %>
          <p>
            <%= f.label :title, name: "Title" %>
            <%= f.text_field :title, placeholder: service_line_item.title %>
            <br>
            <%= f.label :body, name: "Body" %>
            <%= f.text_field :body, placeholder: service_line_item.body %>
            <%= f.submit "change" %>
          </p>
   <% end %>

我的应用程序配置为可通过子目录“ zoom”访问。此nginx块将流量重定向到我的Rails服务器。

location /zoom {
   proxy_pass http://localhost:3000;
}

这是服务器日志的输出

Started POST "/zoom/services/new-line-item?service_id=2&service_type=2" for 127.0.0.1 at 2019-01-25 22:55:42 +0000
Processing by ServicesController#new_line_item as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"6t1vC2dqnJ7QQO8+6+U06YP9TJE93rf0wDzXOar2WkeOj+DLKKpBMihz0NzrSiliE5gsZ1WDPXu5E3tQn9GXlw==", "service_line_item"=>{"title"=>"a", "body"=>""}, "commit"=>"create", "service_id"=>"2", "service_type"=>"2"}
HTTP Origin header (https://dev.mysite.com) didn't match request.base_url (http://localhost:3000)
Completed 422 Unprocessable Entity in 0ms (ActiveRecord: 0.0ms)

我不想禁用CSRF保护,但是我不确定如何在不这样做的情况下绕过此错误。我很奇怪为什么Firefox和Microsoft Edge而不是Chrome可以工作。任何帮助将不胜感激。

0 个答案:

没有答案