Passport req.logOut() 函数不起作用? [复制]
Posted
技术标签:
【中文标题】Passport req.logOut() 函数不起作用? [复制]【英文标题】:Passport req.logOut() function not working? [duplicate] 【发布时间】:2018-01-14 10:07:16 【问题描述】:我正在尝试将 Passport 注销功能合并到我的快速获取请求路由之一中,它似乎并没有破坏会话。在我发出注销请求后,我试图隐藏的端点仍然可以访问。
代码如下:
const express = require('express');
const router = express.Router();
const app = express();
const path = require('path');
const passport = require('passport');
const passportHttp = require('passport-http');
const logout = require('express-passport-logout');
router.get('/', function (req, res)
logout();
console.log('logged out');
res.sendFile(path.resolve('./public/logout.html'));
)
module.exports = router;
任何帮助将不胜感激!谢谢!
【问题讨论】:
对不起,我忘了补充,我已经尝试了您的示例和护照文档中的所有拼写变化,但仍然没有。 我也已经阅读了该帖子,它并没有解决我的问题,因为推荐的解决方案已被弃用。 如果建议的解决方案不起作用,您能否提供更多信息?您可以告诉我们您正在使用什么版本,您正在使用哪些其他软件包等。另外请阅读我编辑的答案 我尝试了很多解决方案,但没有一个对我有用。最后,我尝试将包 passport@0.2.0 更新为 passport@0.2.2 并且成功了! 【参考方案1】:您是否尝试过使用 req.logout();而不是 logout();
没有这两个包?
const passportHttp = require('passport-http');
const logout = require('express-passport-logout');
【讨论】:
不知道是谁投了反对票,但这应该是答案:) 这是正确的答案...为什么有人投了反对票?【参考方案2】:给定的模块实际上返回一个路由器处理程序,即function (req, res) ..
。在您的情况下,这不需要req
。可以看源码here。
你可以这样使用它:
router.get('/logout', logout());
您可以使用如下模块作为中间件:
var logout = function()
return function (req, res, next)
req.logout();
delete req.session;
next();
;
;
router.get('/', logout, function (req, res)
console.log('logged out');
res.sendFile(path.resolve('./public/logout.html'));
)
【讨论】:
【参考方案3】:如果你使用的是 express locals,那么在req.logout()
之后,添加这一行:
req.user=null
或
delete req.user
希望对你有帮助
【讨论】:
【参考方案4】:/* Handle Logout */
router.get('/logout', function(req, res)
console.log("I am Logout")
req.logout();
res.json(
status: "logout",
msg:"Please Log In again"
);
);
只要您在前端没有任何错误,这肯定会起作用。
【讨论】:
以上是关于Passport req.logOut() 函数不起作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章