【问题标题】:koa-passport logout() is not clearing sessionkoa-passport logout() 没有清除会话
【发布时间】:2019-09-13 02:12:12
【问题描述】:

我正在使用 koa、koa-passport 和 koa-session 来记录用户,这些都可以正常工作,但是当我调用 ctx.logout() 时,用户可以刷新并仍然登录。看来 ctx.session 和/或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

【问题讨论】:

  • 我也有同样的问题...你找到解决办法了吗?

标签: node.js passport.js koa koa-passport koa-session


【解决方案1】:

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

await ctx.logout();
ctx.session = null;

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

【讨论】:

    【解决方案2】:
    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({})
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 2020-01-20
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      相关资源
      最近更新 更多