Заставьте 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 во все мои запросы, как только они будут установлены.
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.
Если это то, что вам нужно, отлично.
Если нет, пожалуйста, прокомментируйте, чтобы я мог подробнее рассказать.
Comments