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() 函数不起作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

护照-谷歌-oauth 无法注销用户

如何彻底销毁护照/快递会话?

Expressjs护照本地无法注销

如何在 ApolloServer 中获取 req.user

passport-jwt,不抛错误,但不认证。甚至不会console.log

如何从sails action2调用Passport Authenticate函数