Заставьте Axios автоматически отправлять файлы cookie в своих запросах



Я посылаю запросы от клиента в мой экспресс.сервер js, использующий Axios.



Я установил файл cookie на клиенте и хочу прочитать этот файл cookie из всех запросов Axios, не добавляя их вручную в запрос вручную.



Это мой клиентский пример запроса:



axios.get(`some api url`).then(response => ...


Я попытался получить доступ к заголовкам или файлам cookie, используя эти свойства в моем Express.сервер js:



req.headers
req.cookies


Ни один из них не содержатся какие-либо cookies. Я использую cookie parser промежуточное по:



app.use(cookieParser())


Как заставить Axios автоматически отправлять файлы cookie в запросах?



Правка:



Я устанавливаю куки на клиенте следующим образом:



import cookieClient from 'react-cookie'

...
let cookie = cookieClient.load('cookie-name')
if(cookie === undefined){
axios.get('path/to/my/cookie/api').then(response => {
if(response.status == 200){
cookieClient.save('cookie-name', response.data, {path:'/'})
}
})
}
...


Хотя он также использует Axios, это не имеет отношения к вопросу. Я просто хочу встроить файлы cookie во все мои запросы, как только они будут установлены.

1137   5  

5 ответов:

У меня была та же проблема, и я исправил ее с помощью с помощью свойства credential.

XMLHttpRequest из другого домена не может устанавливать значения файлов cookie для своего собственного домена, если withCredentials не имеет значения true перед выполнением запроса.

axios.get('some api url', {withCredentials: true});

Я не знаком с Axios, но насколько я знаю в javascript и ajax есть опция

withCredentials: true

Это автоматически отправит файл cookie на клиентскую сторону. Например, этот сценарий также генерируется с помощью passportjs, который устанавливает файл cookie на сервере

Другим решением является использование этой библиотеки:

Https://github.com/3846masa/axios-cookiejar-support

Который интегрирует поддержку "жесткого печенья" в Axios. Обратите внимание, что для этого подхода по-прежнему требуется флаг withCredentials.

Также важно задать необходимые заголовки в экспресс-ответе. Вот те, которые работали на меня:

app.use(function(req, res, next) {
  res.header('Access-Control-Allow-Origin', yourExactHostname);
  res.header('Access-Control-Allow-Credentials', true);
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
  next();
});

Вы смешиваете эти две мысли.

У вас есть "react-cookie "и"axios"

React-cookie => предназначен для обработки файлов cookie на стороне клиента

Axios => предназначен для отправки запросов ajax на сервер

С этой информацией, если вы хотите, чтобы файлы cookie с клиентской стороны передавались также и на серверной стороне, вам нужно будет соединить их вместе.

Примечание из Readme "react-cookie":

Изоморфные печенья!

Чтобы иметь возможность чтобы получить доступ к файлам cookie пользователей во время рендеринга сервера, вы можно использовать plugToRequest или setRawCookie.

Ссылка на readme

Если это то, что вам нужно, отлично.

Если нет, пожалуйста, прокомментируйте, чтобы я мог подробнее рассказать.

Comments

    Ничего не найдено.