Expressjs护照本地无法注销

Posted

技术标签:

【中文标题】Expressjs护照本地无法注销【英文标题】:Expressjs passport-local can't logout 【发布时间】:2012-09-10 14:00:58 【问题描述】:

我将应用护照本地复制粘贴到我的应用上,

有趣的是我可以登录用户,但我不能让他们注销,

app.get('/logout', function(req, res)
  req.logout();
  res.redirect('/');
);

这不是什么都不做,日志文件上什么都没有,我有一个指向 /logout 的链接

这是主要路线示例

app.get('/page1', function(req, res)                                                                                                                       
  res.render('page1', user: req.user);
);

app.get('*', function(req,res)
  res.render('root', user: req.user);
);

为什么注销它不起作用????

【问题讨论】:

passportjs.org/guide/log-out.html 解释它,我也试过 req.logOut();并且无法退出本地策略 我唯一不同的是我删除了这行app.use(app.router); 因为破坏了我的引导模板 来吧需要帮助,为什么我无法注销 看起来像这个问题的副本,它确实有一个可能有效的答案。虽然我还没有验证做 req.session.detroy() ***.com/questions/13758207/… 是否还有其他问题 【参考方案1】:

显然这是一个已知问题:

Why is PassportJS in Node not removing session on logout

上面提到的帖子建议改用req.session.destroy()

如果您能直接从 Passport 团队获得一些反馈,那就太好了。

【讨论】:

【参考方案2】:

这仍然是个问题。

我所做的是在服务器端和客户端使用req.session.destroy(function (err) );,每当他们注销时:

const logout = () => 
    const url = '/users/logout'
    fetch(url)
    setTimeout(function () 
      location.reload();    , 500);

这样,当刷新页面时,用户没有会话。如果没有人通过身份验证,请确保您重定向到正确的页面。

也许不是最好的方法,但它确实有效。

【讨论】:

以上是关于Expressjs护照本地无法注销的主要内容,如果未能解决你的问题,请参考以下文章

req.session.passport 为空,未调用 deserializeUser - ExpressJS,Passport

TypeError:无法读取未定义的属性“findAll”(expressjs)

Nodejs:无法同时运行expressjs和reactjs

没有 ExpressJS 到本地服务器的“Access-Control-Allow-Origin”标头

TypeError:无法读取未定义的属性“findAll”(mariaDB,ExpressJs)

无法使用 NodeJS/ExpressJS 和 Postman 获取 POST 数据