2012-05-08 7 views
13

Пытаюсь обходной путь, как описано здесьПочему Passport.js дает мне ошибку промежуточного программного обеспечения?

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) 

ответ

26

Вам все еще нужно 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'))); 

});