Passport.js为什么会给我一个中间件错误?

13

我正在尝试这里描述的解决方法

https://github.com/jaredhanson/passport/issues/14

app.use(passport.initialize());
app.use(passport.session());  
app.use(app.router);
app.use(express.static(__dirname + '/public'));

运行正常

app.use(app.router);
app.use(express.static(__dirname + '/public'));
app.use(passport.initialize());
app.use(passport.session()); 

提供

DEBUG: Error: passport.initialize() middleware not in use
    at IncomingMessage.<anonymous> (/.../node_modules/passport/lib/passport/http/request.js:30:30)
    at Context.<anonymous> (/.../node_modules/passport/lib/passport/middleware/authenticate.js:92:11)
    at Context.<anonymous> (/.../core/node_modules/passport/lib/passport/context/http/actions.js:21:25)
    at Strategy.success (native)
3个回答

28

在 Passport 之后仍需要使用 app.use(app.router)。否则,您的路由将在任何 Passport 代码之前运行,这就是为什么会出现错误的原因。应该这样处理:

app.use(express.static(__dirname + '/public'));
app.use(passport.initialize());
app.use(passport.session()); 
app.use(app.router);

0

可能对某人有帮助,我也遇到了同样的问题。我的应用程序配置看起来像这样。这导致了错误。

app.configure(function() {
  ....
app.use(app.router);    
app.use(passport.initialize());
app.use(passport.session());
app.use(express.static(path.join(__dirname, 'public')));

});

我必须按照以下顺序重新排列才能使其正常工作。

app.configure(function() {
  ....
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);    
app.use(express.static(path.join(__dirname, 'public')));

});

0

对我有用的是放置:

app.use(passport.initialize());
app.use(passport.session());

在任何其他app.use之前。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接