我在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);
}
};
检查postman和axios中请求的cookie,它们是否相同?这看起来像是 cookie 问题,可能不是同一个域。