Nodejs - Axios 不使用 Cookie 进行发布请求
Posted
技术标签:
【中文标题】Nodejs - Axios 不使用 Cookie 进行发布请求【英文标题】:Nodejs - Axios not using Cookie for post request 【发布时间】:2021-12-25 14:02:26 【问题描述】:我在 AXios 上苦苦挣扎:我的发布请求似乎没有使用我的 Cookie。
首先,我正在创建一个 Axios 实例,如下所示:
const api = axios.create(
baseURL: 'http://mylocalserver:myport/api/',
header:
'Content-type' : 'application/json',
,
withCredentials: true,
responseType: 'json'
);
我尝试与之交互的 API 需要密码,因此我定义了一个包含我的密码的变量:
const password = 'mybeautifulpassword';
首先,我需要发布一个创建会话的请求,并获取 cookie:
const createSession = async() =>
const response = await api.post('session', password: password);
return response.headers['set-cookie'];
现在,通过使用返回的 cookie(存储在 cookieAuth 变量中),我可以与 API 进行交互。
我知道有一个端点允许我检索信息:
const readInfo = async(cookieAuth) =>
return await api.get('endpoint/a',
headers:
Cookie: cookieAuth,
)
这工作正常。
当我想发起一个帖子请求时,这是另一个故事。
const createInfo = async(cookieAuth, infoName) =>
try
const data = JSON.stringify(
name: infoName
)
return await api.post('endpoint/a',
headers:
Cookie: cookieAuth,
,
data: data,
)
catch (error)
console.log(error);
;
当我启动 createInfo 方法时,我得到了 401 状态(未授权)。看起来 Axios 没有将我的 cookieAuth 用于发布请求...
如果我使用 Postman 发出相同的请求,它可以工作...
我在这段代码中做错了什么?非常感谢您的帮助
【问题讨论】:
您可以将cookieJar support 添加到 axios,这样它就会为您保留 cookie,而不是您手动进行.. 你看清楚response.headers['set-cookie']
是什么了吗?由于您可以有多个 set-cookie
标头,因此我认为这可能是一个数组,而不是单个 cookie。此外,它可能包含过期信息和其他属性,您不会发送回服务器。
【参考方案1】:
我终于发现了我的错误。
如 Axios 文档 (https://axios-http.com/docs/instance) 中所述
指定的配置将与实例配置合并。
创建实例后,我必须遵循以下结构来执行发布请求:
axios#post(url[, data[, config]])
我的请求现在有效:
await api.post('endpoint/a', data: data,
headers:
'Cookie': cookiesAuth
);
【讨论】:
以上是关于Nodejs - Axios 不使用 Cookie 进行发布请求的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用 Axios 的 MERN 应用程序中的请求不发送 Cookie
配置 Axios 和 Flask 以使用 CORS 和 cookie