首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >koa-passport注销()不是清除会话

koa-passport注销()不是清除会话
EN

Stack Overflow用户
提问于 2019-04-24 04:23:59
回答 2查看 779关注 0票数 5

我正在使用koa、koa-passport和koa-session来登录用户,在其中工作得很好,但是当我调用ctx.logout()时,用户可以刷新并仍然可以登录。似乎没有正确清除ctx.session和/或cookies。

当使用Postman发出请求时,这仍然会失败。

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2019-12-03 09:29:26

我从https://github.com/expressjs/cookie-session/issues/104获取了这个答案,这样你就可以找到对话框的完整历史记录,但我只是节省了一些时间,并将答案写在下面:

代码语言:javascript
复制
await ctx.logout();
ctx.session = null;

我猜他只是不知道,ctx.logout异步函数

票数 0
EN

Stack Overflow用户

发布于 2022-01-10 20:49:54

代码语言:javascript
复制
res.logout()

在会话cookie中将passport设置为{},但保留cookie不变。例如:

代码语言:javascript
复制
{
  cookie: {
    originalMaxAge: 604800000,
    expires: '2022-01-17T19:14:31.872Z',
    secure: false,
    httpOnly: true,
    path: '/'
  },
  passport: {}
}

这对于用cookie存储任何其他内容都很有帮助。

要实际删除cookie,请按如下方式使用res.clearCookie()

代码语言:javascript
复制
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({})
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55818887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档