Подтвердить что ты не робот

Почему 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)
4b9b3361

Ответ 1

Вам все равно нужно app.use(app.router) после паспорта. В противном случае ваш маршрут будет запущен до любого кода паспорта, и поэтому вы увидите ошибку. Это должно работать:

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

Ответ 2

Могу помочь кому-то, у меня была такая же проблема. Моя настройка приложения выглядела так. Это вызвало ошибку.

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')));

});