Passport和ExpressJS,未调用路由功能

时间:2014-01-13 00:43:42

标签: javascript node.js express passport.js

我使用护照进行一些管理员身份验证,但重定向似乎不是在调用我的功能。因此,登录时打印的所有内容都是[object Object]

我的代码: 路由

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

1 个答案:

答案 0 :(得分:0)

@robertklep是正确的,将null作为deserializeUser内部完成的第一个参数传递。

passport.deserializeUser(function(id, done){
            user.getCollection().findById(id)
            .on('success', function(doc){done(null,doc)});
        });