Задать вопрос
blonde_13
@blonde_13

Почему не устанавливаются cookies про обращении SPA по API к серверу?

Есть приложение на React, которое расположено на хосте mysite.com. Оно общается по API с сервером расположенном на хосте api.othermysite.com. Все работало отлично, пока дело не дошло до авторизации и установки сессионной куки на клиенте (браузере).
Сессионная кука с api сервера прилетает, но никак не устанавливается, чтобы я ни делала.
На клиенте запросы отправляю через axios со следующими параметрами:

const instance = axios.create({
    withCredentials: true,
    baseURL: (api.othermysite.com),
    headers: {
        'App-Name': (name),
        'Api-Key':  (key),
    },
})

Сервер написан на php. Заголовки ответа следующие:

$this->response->addHeader('Access-Control-Allow-Credentials: true');
        $this->response->addHeader('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
        $this->response->addHeader('Access-Control-Allow-Origin: mysite.com" );
        $this->response->addHeader('Access-Control-Allow-Headers: Content-Type, App-Name, Api-Key, Access-Control-Allow-Credentials');
        $this->response->addHeader('Cross-Origin-Resource-Policy: cross-origin');
        $this->response->addHeader('Content-Type: application/json');

Весь смысл API в том, чтобы обращаться к нему из разных источников, но как сохранить состояние сессии на клиенте не могу понять.
  • Вопрос задан
  • 2108 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 1
blonde_13
@blonde_13 Автор вопроса
Я разобралась! Для того чтобы все работало так как я хотела нужно на стороне сервера при установке cookies в setcookie добавить опции SameSite=None, Secure и тогда браузер будет устанавливать cookies.
Но имейте ввиду, что опция Secure требует работы по защищенному протоколу https, по этому для локальной разработки в браузере Chrome нужно отключить проверку этого параметра.
chrome://flags параметер SameSite by default cookies перевести в положение Disabled
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы