Cookies не устанавливаются в браузере в SPA для связи API - PullRequest
1 голос
/ 08 апреля 2020

Я настраиваю приложение 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

Я также вижу, что куки отправляются в браузер, но их нет в разделе Cookies

enter image description here

Есть мысли о то, чего мне здесь не хватает, очень ценится !!! Спасибо !!

ОБНОВЛЕНИЕ:

Я также должен был упомянуть, что мой файл конфигурации сеанса настроен на разрешение субдоменов

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

Когда я использую www.mysite.com и api.mysite.com имен, панель справа просто пуста.

1 Ответ

1 голос
/ 09 апреля 2020

Я изучал это, и я думаю, что это может иметь отношение к тому, что вы видите:

Поделиться поваром ie между поддоменом и доменом

Очевидно, что если вы не укажете домен в заголовке set-cookie, повар ie будет считаться "только хостом". Так что вам может понадобиться, чтобы это выглядело так:

Set-Cookie: name=value; domain=mydomain.com

Я уверен, что это возможно с Ax ios.

...