POST с телом, не пропускающим файлы cookie
Я использую библиотеку axios-cookiejar-support.
У меня есть POST, который содержит тело, и по какой-то причине Cookies не вводятся в запрос. Что я сделал не так здесь:
return axios
.post(
urlJoin(
config.portal.url,
'Account/Register'),
{
UserName: "[email protected]",
UserFirstName: "First Name",
UserLastName: "Last Name",
Email: "[email protected]",
Password: "...",
ConfirmPassword: "..."
},
{
jar: cookieJar,
withCredentials: true
})
.then(res => callback())
.catch(err => callback(err))
Странная часть, если я выполняю GET против той же конечной точки, куки файлы передаются:
return axios
.get(
urlJoin(
config.portal.url,
'Account/Register'),
{
jar: cookieJar,
withCredentials: true
})
.then(res => callback())
.catch(err => callback(err));
Кроме того, если я выполняю POST без тела, они передаются:
.post(
urlJoin(
config.portal.url,
`Account/LoginApi?UserName=${config.portal.userName}&Password=${config.portal.password}`),
null,
{
jar: cookieJar,
withCredentials: true
})
.then(res => callback())
.catch(err => callback(err))
Инициализация Cookie Jar
import axios from 'axios'
import axiosCookieJarSupport from '@3846masa/axios-cookiejar-support'
import tough from 'tough-cookie'
import urlJoin from 'url-join'
const config = require('config');
import { TEST_STATUS_TYPES, TEST_TASK_TYPES } from '../constants/testsConstants'
axiosCookieJarSupport(axios);
const cookieJar = new tough.CookieJar();
Ответы
Ответ 1
Как я уже говорил, я подозреваю сериализацию. Потому что, когда вы передаете свои данные в виде строки запроса, она работает так, как вы ожидали. Так что попробуйте это
var qs = require('qs');
return axios
.post(
urlJoin(
config.portal.url,
'Account/Register'),
qs.stringify({
UserName: "[email protected]",
UserFirstName: "First Name",
UserLastName: "Last Name",
Email: "[email protected]",
Password: "...",
ConfirmPassword: "..."
}),
{
jar: cookieJar,
withCredentials: true
})
.then(res => callback())
.catch(err => callback(err))