Задать вопрос
SanchelliosProg
@SanchelliosProg
Java, Android, Software Testing

Как передавать cookie с сервера написанного на Golang в ReactJS приложение, если между ними CORS?

Возникла проблема. Есть серверное приложение написанное на Go, которое выполняет функции API. И есть ReactJS приложение. Они расположены на разных адресах, соответственно у них CORS. Ну, так уж и быть, разрешил между ними такие взаимоотношения, но предполагается, что Go передаёт браузеру cookie а потом этот state использует для дальнейших действий. И cookie передаётся браузеру, если мы просто дёргаем соответствующий запрос через браузер. Но вот из приложения на React тот же самый запрос не приводит к такому результату. Response получен, а вот cookie нет. Всему виной CORS.

Вот что делать - я не знаю. Может я иду в неправильном направлении? Может, нужно генерить cookie в React приложении основываясь на каких-либо данных полученных с сервера? Может нужно использовать JWT? Дайте подсказку.
  • Вопрос задан
  • 1675 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 4
@Frimko
для того, чтобы браузер сохранял куки, которые нам присылает сервер. Необходимо отдать 4 заголовка
  • включение cors
    "Access-Control-Allow-Headers: Content-Type"

  • показываем клиенту, что эти запросы используют cors
    "Access-Control-Allow-Methods: POST, OPTIONS"
    за место POST, OPTIONS может стоять любая экзотика, которую вы отправляете
  • разрешаем браузеру сохранять от данного сервера куки
    Access-Control-Allow-Credentials: true

  • ну а чтобы браузер сохранил эту куку для вашего домена SPA-приложения не забываем
    Access-Control-Allow-Origin: http://localhost:3000
    где http://localhost:3000 - адрес вашего SPA-приложения
  • в надбавку не забываем отвечать на запросы OPTIONS
    HTTP/1.1 200 OK
    если вы используете rest-api, обычно это делает библиотека

чтобы отправлять куки в своих запросах вы должны отметить
withCredentials: true

в Jquery в $.ajax он добавляется параметром
$.ajax({
xhrFields: { withCredentials: true },
});
Ответ написан
Комментировать
bitver
@bitver
Гуглится же.
  1. https://stackoverflow.com/questions/3342140/cross-... (1-ый вариант дефолтный, 2-ой вариант надо проверять)
  2. www.ainixon.me/set-cookie-on-cross-domains
  3. www.nfriedly.com/techblog/2010/08/how-facebook-set... (Cookies can be read in an iframe if they were set outside of the iframe? тож надо проверять реально ли так и во всех ли браузерах)
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Заверните API в React-приложение - смонтируйте на тот же серв (чтобы адрес домена был один) и всё.
Ответ написан
gadfi
@gadfi
https://gamega.org
я в свое время просто для разработки отключал безопасность в браузере, не знаю заведется ли с вашим бекендом но должно)
$ open -a Google\ Chrome --args --disable-web-security --user-data-dir

по идее должно помочь
Ответ написан
Ваш ответ на вопрос

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

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