Я настраиваю приложение React SPA (www.mysite.com) и Rails API (api.mysite.com). Когда я использую одно и то же имя URL-адреса, все работает должным образом, однако, когда имена URL-адресов отличаются, веб-браузер не настраивает сайт cook ie. При отсутствии файлов cookie проверка CSRF также не проходит, конечно. Так, например, если приложение SPA работает на localhost
, а приложение Rails API на localhost:3000
все хорошо, проблема заключается только в том, что я использую предполагаемые имена DNS.
Звучит как проблема CORS, но я не могу найти, где в течение многих дней…
Вот мой конфиг:
Rails сторона, которую я использую rack-cors
ruby gem
config / initializers / cors .rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins 'localhost’, 'www.mysite.com',
resource '*',
headers: :any,
credentials: true,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
Rails.application.config.action_controller.forgery_protection_origin_check = false
на стороне React У меня есть axios
config следующим образом:
src / App. js
axios.defaults.xsrfCookieName = "CSRF-TOKEN";
axios.defaults.xsrfHeaderName = "X-CSRF-Token";
axios.defaults.withCredentials = true;
Когда приложение React запускается, оно отправляет GET
запрос к бэкэнду API, чтобы получить токен CSRF для дальнейшего использования. В то же время браузер должен устанавливать файлы cookie сайта.
axios
.get("/sessions/csrf_token", {
headers: { "Content-Type": "application/json"
},
})
.then(response => {
// do stuff
});
});
Заголовки ответов выглядят одинаково в обоих случаях, когда файлы cookie сайта установлены и отсутствуют
![enter image description here](https://i.stack.imgur.com/gHEad.jpg)
Я также вижу, что куки отправляются в браузер, но их нет в разделе Cookies
![enter image description here](https://i.stack.imgur.com/v1YwQ.jpg)
Есть мысли о то, чего мне здесь не хватает, очень ценится !!! Спасибо !!
ОБНОВЛЕНИЕ:
Я также должен был упомянуть, что мой файл конфигурации сеанса настроен на разрешение субдоменов
config / initializers /session_store.rb
Rails.application.config.session_store :cookie_store, key: '_mysite_session', expire_after: 8.hours, domain: :all, tld_length: 2
Возможно, что-то не так с моей конфигурацией файлов cookie, но я не могу понять, где искать и какие другие параметры следует проверить.
Вот снимок экрана с моей панелью Cookies, когда я использую localhost
, и куки сохраняются в браузере, как и ожидалось:
![enter image description here](https://i.stack.imgur.com/umGYM.jpg)
Когда я использую www.mysite.com
и api.mysite.com
имен, панель справа просто пуста.