2014-01-13 3 views
0

Я использую паспорт для некоторой аутентификации администратора, но перенаправление, похоже, не вызывает меня. В результате все, что печатается на входе в [объект Object]Паспорт и ЭкспрессJS, функция маршрута не называется

Мой код: Маршруты

app.get('/admin', isLoggedIn, Routes.admin); 
     app.get('/login', Routes.adminLogin); 
     app.post('/login', passport.authenticate('local-login', { 
      successRedirect : '/admin', 
      failureRedirect : '/login' 
     })); 

установка паспорта

var LocalStrategy = require('passport-local').Strategy; 
     passport.serializeUser(function(user,done){ 
      done(null, user._id); 
     }); 
     passport.deserializeUser(function(id, done){ 
      user.getCollection().findById(id) 
      .on('success', function(doc){done(doc)}); 
     }); 
     passport.use('local-login', new LocalStrategy({ 
      usernameField : 'username', 
      passwordField : 'password', 
      passReqToCallback : true 
     }, function(req,username,password,done){ 
      user.getName(username) 
      .on('success', function(doc){ 
       if(doc == null || doc.password != password) {return done(null, false, "Invalid password");} 
       return done(null, doc); 
      }) 
      .on('error', function(err){return done(err);}); 
     })); 
    }; 

Администратор маршрута:

var adminRoute = exports.adminRoute = function(req,res){ 
     console.log(" ADMIN PAGE"); 
     res.render('admin.jade'); 
    }; 
+0

Как выглядит ваш маршрут/контроллер adminLogin? – cyberwombat

+0

Он просто отображает страницу входа. Ничего другого. – robotmayo

+1

Неверный десериализатор, он передает 'doc' как первый аргумент' done', а не второй: 'done (null, doc)'. Не знаю, является ли это причиной вашей проблемы. – robertklep

ответ

0

@robertklep был прав, минуя null как ель t в выполненном внутри deserializeUser.

passport.deserializeUser(function(id, done){ 
      user.getCollection().findById(id) 
      .on('success', function(doc){done(null,doc)}); 
     }); 
Смежные вопросы