koa-passport logout() 不清除会话
koa-passport logout() is not clearing session
我正在使用 koa、koa-passport 和 koa-session 来登录用户,在其中工作正常,但是当我调用 ctx.logout() 时,用户可以刷新并仍然登录。似乎 ctx.session and/or cookie 没有被正确清除。
使用 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
我从 https://github.com/expressjs/cookie-session/issues/104 那里得到了这个答案
所以你可以找到对话的完整历史记录,但我只是为了节省一些时间并在下面写下答案:
await ctx.logout();
ctx.session = null;
我猜他只是不知道,ctx.logout 是 异步函数
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({})
}
我正在使用 koa、koa-passport 和 koa-session 来登录用户,在其中工作正常,但是当我调用 ctx.logout() 时,用户可以刷新并仍然登录。似乎 ctx.session and/or cookie 没有被正确清除。
使用 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
我从 https://github.com/expressjs/cookie-session/issues/104 那里得到了这个答案 所以你可以找到对话的完整历史记录,但我只是为了节省一些时间并在下面写下答案:
await ctx.logout();
ctx.session = null;
我猜他只是不知道,ctx.logout 是 异步函数
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({})
}