InvalidAuthenticityToken for Rails API仅适用于发布请求

时间:2019-10-27 07:50:50

标签: ruby-on-rails ruby cors

我正在使用仅API的应用程序,并在发布请求时不断出错。发布请求来自前端应用程序,我也正在与邮递员一起测试示例数据。

这是我每次尝试提交请求时都会收到的错误

HTTP Origin header (http://localhost:3000) didn't match request.base_url (http://localhost:4000)
Completed 422 Unprocessable Entity in 1ms (ActiveRecord: 0.0ms | Allocations: 238)

我已设置好机架式宝石,其来源指向localhost:3000。

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins 'http://localhost:3000'

    resource '*',
      headers: :any,
      credentials: true,
      methods: [:get, :post, :put, :patch, :delete, :options, :head]
  end
end

2 个答案:

答案 0 :(得分:0)

您可以添加多个允许的来源:

origins 'localhost:3000', 'localhost:4000'

您还可以使用正则表达式:

origins /\Ahttps?:\/\/localhost:\d{1,}$/

一个更好的解决方案是,避免对域进行硬编码并使用ENV变量。

但是ActionController::InvalidAuthenticityToken实际上是由Rails CSRF保护引起的,它与CORS无关。它是针对“经典应用”的基于会话的CSRF保护方案,您可以通过删除中间件(首选)或skip_before_action :verify_authenticity_token在API中删除。

答案 1 :(得分:0)

您应该更改基本控制器 喜欢:

class Api::V1::BaseController < ApplicationController

class Api::V1::BaseController < ActionController::API
相关问题