Набор Cook ie не появляется в Axe ios и Fetch - PullRequest
1 голос
/ 25 февраля 2020

Я использую свою конечную точку API для аутентификации и задаю повар только для http ie с токеном Lexik JWT в ответе, когда тестирую его с почтальоном, все работает отлично, повар ie настроен правильно, что следует отметить, что CORS с помощью Nelmio Cors Bundle 1009 *

const onSubmit = e => {
    e.preventDefault();

    fetch('http://127.0.0.1:8000/api/get-cookies', {
      method: 'POST',
      credentials: 'include',
      body: JSON.stringify({
        username: form.username,
        password: form.password,
      }),
      headers: {
        "Content-Type": "application/json",
      }
    })
    .then( response => response.json()).then( json => console.log(json)).catch( error => console.log(error));

    Axios.post('http://127.0.0.1:8000/api/get-cookies', {
      username: form.username,
      password: form.password,
    }, {
      withCredentials: true,
      maxRedirects: 0,
      headers: {
        "Content-Type": "application/json",
      }
    }).then(response => console.log(response)).catch( error => console.log(error));
  }

После запуска функции onSubmit ответ действительно является токеном JWT, но заголовок SET COOK IE отсутствует и файлы cookie не установлены.

1 Ответ

0 голосов
/ 25 февраля 2020

После 3 часов исследований в топор ios документов, прочитав множество похожих вопросов, предлагающих различные исправления и тестирование, я наконец-то пришел к следующим вещам:

Шаг 1:
Для AX IOS убедитесь, что для параметра withCredentials в конфигурации установлено значение true (возможно, вам не хватает его, если не все в порядке, просто go до следующего шага)

config = { ...yourConfig, withCredentials: true }
Axios.post(url, data, config).then.....

Обратите внимание, что maxRedirects не требуется (код в вопросе)
Для FETCH убедитесь, что для учетных данных в конфигурации установлено значение «включить» (возможно, вам не хватает его, если не все в порядке, просто go до следующего шага)

config = { ...yourConfig, credentials: "include"
fetch(url, config).then....


Шаг 2:
Это забавная часть: ваш сервер работает не на локальном домене, как на 127.0.0.1:8000 url? Вот загвоздка, которую Google Chrome и браузер, основанный на chrome движке, будут блокировать файлы cookie с любого URL с постфиксным портом (я не уверен насчет других браузеров, но на всякий случай обслуживаю ваш бэкэнд на http://localhost - 127.0.0.1:80, используйте файл hosts для сопоставления вашего URL-адреса с доменом, используйте localtunnel / ngrok на тот случай, если ваш браузер решит пожаловаться на ваш URL-адрес бэкэнда)

Теперь все готово для хранения вашего HTTP-файлы cookie, отправляемые только из ответов, независимо от языка бэкэнда, после включения CORS оно должно быть примерно таким же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...