我使用Passport lib(部分内容)使用this tutorial构建应用程序。
注意,我不需要注册,只需要登录表单。
其中一个问题是我的 LocalStrategy 回调永远不会被调用。对于存储,我使用mongo:
mongoose.connect(dbConfig.url, {
useMongoClient: true
});
//dbConfig
module.exports = {
'url' : 'mongodb://localhost/passport'
}
登录路线如下:
module.exports = function(app, passport) {
app.get('/login', function(req, res) {
res.render('login', {
message: req.flash('loginMessage')
});
});
app.post('/login', passport.authenticate('login', {
successRedirect: '/', // redirect to the secure profile section
failureRedirect: '/login', // redirect back to the signup page if there is an error
failureFlash: true // allow flash messages
}));
}
Passport逻辑是:
module.exports = function(passport) {
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
passport.use('login', new LocalStrategy({
passReqToCallback: true
}, function(req, username, password, done) {
console.log('start'); // never called
User.findOne({
'local.email': email
}, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, req.flash('loginMessage', 'No user found.'));
}
if (!user.validPassword(password)) {
return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.'));
}
return done(null, user);
});
}));
};
console.log('start'); 永远不会被调用,但会调用 passport.authenticate('login'...)。
可能是什么问题?
答案 0 :(得分:0)
我终于修好了,一切正常。如果有人遇到同样的问题我会在这里发布几个问题和解决方案。
我的 app.post 中的 req.body 为空,因为我没有添加正文解析器。修正了:
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
用户名字段一直是空的,因为我将其命名为电子邮件,并将护照命名为用户名。修正:
new LocalStrategy({
usernameField: 'email', // this parameter
passReqToCallback: true
}