【发布时间】:2015-01-08 10:02:46
【问题描述】:
我正在使用护照进行一些管理员身份验证,但重定向似乎没有调用我的功能。结果,登录时打印的所有内容都是 [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');
};
【问题讨论】:
-
您的 adminLogin 路由/控制器是什么样的?
-
它只是呈现登录页面。没有别的自动取款机。
-
您的
deserializeUser有问题,它将doc作为第一个参数传递给done,而不是第二个参数:done(null, doc)。不知道这是否是您的问题的原因。 -
看起来您已将管理页面路由命名为
adminRoute,而您的重定向正在寻找admin。 -
我可以看出这可能是多么令人困惑,我将我的路线别名为此处未包含的 Routes 对象。 @robertklep 关于 null 的事情是正确的。我已经添加了答案。
标签: javascript node.js express passport.js