简体   繁体   中英

Nodejs - Axios not using Cookie for post request

I'm struggling with AXIOS: it seems that my post request is not using my Cookie.

First of all, I'm creating an Axios Instance as following:

const api = axios.create({
    baseURL: 'http://mylocalserver:myport/api/',
    header: {
        'Content-type' : 'application/json',
    },
    withCredentials: true,
    responseType: 'json'
});

The API I'm trying to interact with is requiring a password, thus I'm defining a variable containing my password:

const password = 'mybeautifulpassword';

First, I need to post a request to create a session, and get the cookie:

const createSession = async() => {
    const response = await api.post('session', { password: password});
    return response.headers['set-cookie'];
}

Now, by using the returned cookie (stored in cookieAuth variable), I can interact with the API.

I know there is an endpoint allowing me to retrieve informations:

const readInfo = async(cookieAuth) => {
    return await api.get('endpoint/a', {
        headers: {
            Cookie: cookieAuth,
        }
    })
}

This is working properly.

It's another story when I want to launch a post request.

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);
    }
    
};

When I launch the createInfo method, I got a 401 status (Unauthorized). It looks like Axios is not using my cookieAuth for the post request...

If I'm using Postman to make the same request, it works...

What am I doing wrong in this code? Thanks a lot for your help

I finally found my mistake.

As written in the Axios Doc ( https://axios-http.com/docs/instance )

The specified config will be merged with the instance config.

after creating the instance, I must follow the following structure to perform a post requests:

axios#post(url[, data[, config]])

My requests is working now :

await api.post('endpoint/a', {data: data}, {
            headers: {
                'Cookie': cookiesAuth
            }
        });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM