非常简单。我在/user/login
路线中设置了一个像这样的cookie:
if (rememberMe) {
console.log('Login will remembered.');
res.cookie('user', userObj, { signed: true, httpOnly: true, path: '/' });
}
else {
console.log('Login will NOT be remembered.');
}
我已经为cookie-parser设置了秘密:
app.use(cookieParser('shhh!'));
非常基本的东西。只要我能够检索存储在cookie中的任何内容,一切都很有效:
app.use(function (req, res, next) {
if (req.signedCookies.user) {
console.log('Cookie exists!');
req.session.user = req.signedCookies.user;
}
else {
console.log('No cookie found.');
}
next();
});
这个中间件在其他任何东西之前调用,所以为了参数" Cookie存在!"如果cookie有效,则始终在我的控制台中记录。
问题是当我尝试删除cookie时。我已尝试res.clearCookie('user')
,res.cookie('user', '', { expires: new Date() })
,我尝试传入相同的标记(我传递给res.cookie()
中的/user/login
)。我试图使用这些方法的组合,但没有任何效果。
目前,我能够清除cookie(而不是接收" Cookie存在!"日志消息)的唯一方法是清除浏览器历史记录。这是我的注销路线:
route.get('/user/logout', function (req, res, next) {
res.clearCookie('user');
req.session.destroy();
util.response.ok(res, 'Successfully logged out.');
});
似乎我甚至无法修改cookie值;我把
res.cookie('user', {}, { signed: true, httpOnly: true, path: '/' })
在我的注销路线中,但cookie值保持不变。
答案 0 :(得分:4)
经过漫长而烦恼的时间后,我意识到我的前端没有将cookie发送到终点,我正试图清除cookie ......
在服务器上:
function logout(req, res) {
res.clearCookie('mlcl');
return res.sendStatus(200);
}
在前端,
fetch('/logout', { method: 'POST', credentials: 'same-origin' })
添加"凭据:'同源'"是什么让clearCookie为我工作。如果没有发送cookie,则无需清除。
我希望这会有所帮助。我希望我早些发现这个......
答案 1 :(得分:1)
即使它只是一个/logout
端点,您仍然需要发送凭据。
// FRONT END
let logOut = () => {
fetch('logout', {
method: 'get',
credentials: 'include', // <--- YOU NEED THIS LINE
redirect: "follow"
}).then(res => {
console.log(res);
}).catch(err => {
console.log(err);
});
}
// BACK END
app.get('/logout', (req, res) => {
res.clearCookie('token');
return res.status(200).redirect('/login');
});
答案 2 :(得分:0)
通过(广泛的)搜索和随意的想法来判断,答案是使用
res.clearCookie('<token_name>',{path:'/',domain:'<your domain name which is set in the cookie>'});
即。
res.clearCookie('_random_cookie_name',{path:'/',domain:'.awesomedomain.co'});
请注意Cookie中指定的。,因为我们将其用于子域(您可以将其用于没有点的子域,但使用它更安全)。
TLDR;您还必须提供域:。
答案 3 :(得分:0)
即使它不能帮助这个问题的作者,我希望这可以对某人有所帮助。 我遇到了无法在使用Express api的React应用程序中删除Cookie的问题。我使用了axios,几个小时后,我终于能够修复它。
await axios.post('http://localhost:4000/api/logout', { } , { withCredentials: true })
{ withCredentials: true }
是它对我有用的原因。
这是我的Express代码:
const logOutUser = (req, res) => {
res.clearCookie('username')
res.clearCookie('logedIn')
res.status(200).json('User Logged out')
}
答案 4 :(得分:0)
路径必须正确。就我而言,这是拼写错误