Доброе утро всем
Снова получил головокружительный удар и мог бы нуждаться в помощи.
У меня есть клиент React, использующий Rails 5 API. Все отлично работало на localhost, отлично работало. Сначала я развернул клиент на страницах GH, а API - на Heroku, но не смог отправлять запросы на сервер, я продолжаю получать следующее:
Access to XMLHttpRequest at 'https://xxxx.herokuapp.com/auth/login' from origin 'https://xxxx.github.io' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource
Тот же запрос отлично работает с Postman, но теперь он сломан и в localhost, поэтому я ничего не могу сделать :-(
Проблема, по-видимому, связана с CORS - я пробовал несколько конфигураций, но, похоже, ничего не дает даже вмятины, поскольку я продолжаю получать ту же ошибку.
У меня rack-cors gem. Мой application.rb выглядит так:
config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'
resource '*', :headers => :any, :methods => :any # also tried [:get, :post, etc]
end
end
Странно то, что когда я запускаю bundle exec rake middleware, я получаю 2 use Rack::Cors вверху списка - не могу понять почему.
Я пробовал вручную установить заголовки в application_controller.rb:
after_filter :cors_set_access_control_headers
def cors_preflight_check
if request.method == 'OPTIONS'
cors_set_access_control_headers
render text: '', content_type: 'text/plain'
end
end
# protected
def cors_set_access_control_headers
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, PUT, DELETE, GET, PATCH, OPTIONS'
headers['Access-Control-Request-Method'] = '*'
headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization, Credentials'
end
Я пробовал еще несколько вещей, но все равно получаю ту же чертову ошибку. Некоторая помощь была бы потрясающей, заранее спасибо!
У меня есть skip_before_action :authenticate_request, only: %i[login register] в моем users_controller.rb, и я получаю тот же результат





Исправлено - я как-то пропустил совершенно очевидный файл cors.rb, в котором был настроен неправильный origins.
Вы случайно не заглядывали в CSRF? Rails добавляет токен аутентичности ко всем вашим формам для проверки происхождения запроса. Вам необходимо отключить проверку определенных действий, к которым будут обращаться запросы извне приложения:
skip_before_action :verify_authenticity_token, :only => [:update]или другие необходимые вам действия