InvalidAuthenticityToken для рельсов API только приложение для почтового запроса - PullRequest
0 голосов
/ 27 октября 2019

Я использую приложение только для 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

1 Ответ

0 голосов
/ 27 октября 2019

Вы можете добавить несколько разрешенных источников:

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

Вы также можете использовать регулярное выражение:

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

Возможное лучшее решение - избежать жесткого кодирования домена и использовать ENVvars.

Однако ActionController::InvalidAuthenticityToken фактически вызвано защитой Rails CSRF, которая не имеет ничего общего с CORS. Это основанная на сеансе схема защиты CSRF для «классических приложений», которую можно удалить в API либо путем удаления промежуточного программного обеспечения (предпочтительно), либо skip_before_action :verify_authenticity_token.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...