我正在以远程Nginx服务器上托管的Rails 5.2在开发模式下运行应用程序。当我尝试使用Firefox或Microsoft Edge发布或删除记录时,一切正常,但是当我使用Chrome时,我从Rails收到了“ ActionController :: InvalidAuthenticityToken”错误。
在过去的几个小时中,我一直在研究此问题,但找不到与我有相同问题的人。本地一切正常,但是当我将更改推送到远程(开发)服务器时,遇到了一些问题。
Rails 5 ActionController::InvalidAuthenticityToken error和ActionController::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可以工作。任何帮助将不胜感激。