我正在使用koa、koa-passport和koa-session来登录用户,在其中工作得很好,但是当我调用ctx.logout()时,用户可以刷新并仍然可以登录。似乎没有正确清除ctx.session和/或cookies。
当使用Postman发出请求时,这仍然会失败。
import Koa = require('koa');
import session = require('koa-session');
import passport = require('koa-passport');
....
app.keys = ['******'];
app.use(session({}, app));
....
app.use(passport.initialize());
app.use(passport.session());
....
router.get('/logout', (ctx: Context) => {
if (ctx.isAuthenticated()) {
ctx.logout();
ctx.session = null; // Added this but still nothing
}
ctx.response.body = true;
});
我在Express上找到了很多例子,包括以下内容,但在Koa上却一无所获:https://github.com/expressjs/cookie-session/issues/104
发布于 2019-12-03 09:29:26
我从https://github.com/expressjs/cookie-session/issues/104获取了这个答案,这样你就可以找到对话框的完整历史记录,但我只是节省了一些时间,并将答案写在下面:
await ctx.logout();
ctx.session = null;我猜他只是不知道,ctx.logout是异步函数
发布于 2022-01-10 20:49:54
res.logout()在会话cookie中将passport设置为{},但保留cookie不变。例如:
{
cookie: {
originalMaxAge: 604800000,
expires: '2022-01-17T19:14:31.872Z',
secure: false,
httpOnly: true,
path: '/'
},
passport: {}
}这对于用cookie存储任何其他内容都很有帮助。
要实际删除cookie,请按如下方式使用res.clearCookie():
function deauthenticateSession(req: Request, res: Response, next: NextFunction) {
// http://www.passportjs.org/docs/logout/ removes passport from the cookie, not the cookie from the browser
// https://github.com/expressjs/cookie-session/issues/104#issuecomment-416249687
res.clearCookie('connect.sid', { path: '/', httpOnly: true })
res.status(200).json({})
}https://stackoverflow.com/questions/55818887
复制相似问题