【问题标题】:In passportjs when I declare logout in single file it is working but when I move it to different module it is not working在passportjs中,当我在单个文件中声明注销时它正在工作,但是当我将它移动到不同的模块时它不起作用
【发布时间】:2015-01-07 21:38:01
【问题描述】:

单个文件 index.js 正在工作

var passport = require('passport');
var app = express();
....
app.use(passport.initialize());
app.use(passport.session());
app.route('/logout').get(function(req,res){
        req.logout();
        res.send('loggedout');
    });

但是当我把它分成两个文件时

//file1 index.js
var passport = require('passport');
var wrapper = require('./wrapper.js');
var app = express();
....
app.use(wrapper(app,passport));



// file2 wrapper.js

module.exports = function(app, passport){
    return function(req, res, next){
        app.use(passport.initialize());
        app.use(passport.session());
        app.route('/logout').get(function(req,res){
            req.logout();
            res.send('loggedout');
        });
    }
}

在这种情况下,它不是注销。 有时当我将逻辑移动到单独的文件中时,护照初始化无法正常工作,并且我得到“passport.initialize() 中间件未使用”。

告诉我包装护照的方式,以便..所有初始化和会话都在另一个文件(我的意思是模块)中处理,以便在源文件中我可以在不初始化护照的情况下使用包装器。

简而言之,包装护照的模式

【问题讨论】:

    标签: node.js express passport.js


    【解决方案1】:

    您当前的代码在每个传入请求中添加护照初始化和会话中间件。它们被添加到中间件堆栈的末尾,因此可能永远不会被调用。您的请求也永远不会超出此中间件,因为您没有调用 next 方法。您还会造成内存泄漏。

    您的代码可能看起来像(未经测试,只是写下来):

    var passport = require('passport')
    module.exports = function(app) {
      app.use(passport.initialize())
      app.use(passport.session())
    
      app.route('/logout').get(function(req, res) {
        req.logout()
        res.send('loggedout')
      })
    }
    

    用法:

    var app = express();
    require('./passport-stuff')(app)
    

    注意:您可以在多个文件中require('passport'),它们都获得相同的实例。也就是说,您不必提供护照做其他文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 2019-10-08
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 2015-12-12
      相关资源
      最近更新 更多