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 不存储 Django 会话 cookie

异步 axios 不使用 NODEJS 运行承诺

为啥使用 Axios 的 MERN 应用程序中的请求不发送 Cookie

配置 Axios 和 Flask 以使用 CORS 和 cookie

插入并放入nodeJs + express api时,带有Redux Saga的Axios不发送表单数据

没有使用 express 和 passport 设置 Cookie