(React, Node.js) 发送POST请求时出现AxiosError 401,但在Postman上有效

问题描述 投票:0回答:1

我在React中编写了一些代码,通过发送POST请求来执行注销功能,并且在浏览器控制台中显示了以下错误。

注销错误:AxiosError {message: '请求失败,状态代码 401',名称:'AxiosError',代码:'ERR_BAD_REQUEST'

这是我的 React 代码:

axios.post('http://*****azure public domain*****/api/accounts/logout', {}, {
        withCredentials: true
    })
    .then(response => {
        console.log('Logout successful');
    })
    .catch(error => {
        console.error('Logout failed:', error);
    });

这是我的 server.js 中 CORS 和 cookie 的代码。

const cors = require('cors');
app.use(cors({
    origin: (origin, callback) => {
        callback(null, true);
    },
    methods: ["POST", "GET", "PUT", "DELETE"],
    credentials: true
}));

app.use(session({
    key: 'session_cookie_name',
    secret: 'secret',
    store: sessionStore,
    resave: false,
    saveUninitialized: false,
    cookie: {
        secure: false,
        maxAge: 1000 * 60 * 60 * 24
    }
}));

最后这是我的注销控制器代码。

exports.logout = async (req, res) => {
    if (req.session.username) {
        req.session.destroy(err => {
            if (err) {
                return res.status(500).json({
                    message: 'Error during logout'
                });
            }
            res.clearCookie('session_cookie_name');
            return res.status(200).json({
                message: 'Logged out successfully'
            });
        });
    } else {
        return res.status(401).json({
            message: 'Already logged out'
        });
    }
};

我认为我已正确设置凭据,但我不知道问题是什么。它在 Postman 上成功运行。

我尝试使用

axios.create
方法,但它返回了相同的错误,没有任何变化。

import axios from 'axios';
const apiClient = axios.create({
    baseURL: 'http://******azure public domain******/api',
    withCredentials: true,
    headers: {
        'Content-Type': 'application/json'
    },
    timeout: 5000
});
export default apiClient;

export const logout = () => async (dispatch) => {
    try {
        const response = await apiClient.post('/accounts/logout');
        dispatch({
            type: 'LOGOUT'
        });
    } catch (err) {
        console.log('Logout error:', err);
    }
};
reactjs node.js axios
1个回答
0
投票

检查postman和axios中请求的cookie,它们是否相同?这看起来像是 cookie 问题,可能不是同一个域。

© www.soinside.com 2019 - 2024. All rights reserved.