我有一个Express后端,并试图设置Passport身份验证。登录过程工作正常,会话令牌存储为cookie。注销时,clearCookies不会破坏浏览器中的cookie。然而,当我通过Postman拨打电话时,该过程工作正常。
我已经在后端的axios配置中设置了{ withCredentials: true }
,在CORS设置中设置了{ credentials: true }
,还在clearCookies选项中设置了路径。
// BACKEND LOGOUT
exports._logout = (req, res) => {
req.session.destroy(err => {
if (err) res.status(422).send(err);
req.logout();
res.clearCookie("connect.sid", {domain: 'localhost', path:
'/'}).status(200).send('Logged out!.')
});
};
// FRONTEND LOGOUT (REACT/REDUX)
export function logOut() {
return {
type: 'LOG_OUT',
payload: new Promise((resolve, reject) => {
axios
.post(process.env.ACCOUNT_HOST + `/logout`, {withCredentials: true})
.then(response => {
console.log(response);
resolve(response.data);
})
.catch(error => {
notification.error({
message: 'Log In Error',
description: error.message,
duration: null
});
reject(error);
});
})
};
}
当我用Postman调用端点时,它会清除cookie,isAuth函数返回预期的值。你知道为什么它没有清除浏览器中的cookie吗?谢谢。
1条答案
按热度按时间rqenqsqc1#
axios在post请求中接受的第二个参数是请求的主体,而不是选项,因此当前您发送{ withCredentials:true }作为body,而不是cookie。所以passport没有cookie,不能销毁会话。这应该可以工作: