我是SO&Node / Passport的新手,所以提前致歉。我一直在尝试使用Passport(已经可以进行注册)浏览网站的登录部分,但现在没有成功。我已经尝试了一些教程并通读了文档,但是与开始时相比,现在更加困惑了。
问题:尽管根据我的数据库(MongoDB)信息正确,passport.authenticate函数仍将“ user”返回为false。我没有收到任何错误消息,在/ dologin路由中,用户值为false,信息值为“ Missing Credentials”。让我知道是否可以提供其他信息-感谢您的帮助!
尝试:我已经将代码移到了不同的函数,文件等上。尝试了在线找到的不同解决方案,尝试了文档示例,并在模型中编写了自己的方法。等等
App.js文件
app.use(session({
secret: 'secrettexthere',
saveUninitialized: true,
resave: true,
// using store session on MongoDB using express-session + connect
store: new MongoStore({
mongooseConnection: mongoose.connection
})
}));
// Init passport authentication
app.use(passport.initialize());
// persistent login sessions
app.use(passport.session());
passport.use(new LocalStrategy(
function(username, user_password, done) {
User.getUserByUsername(username, function(err,user){
console.log('in getUserByUsername');
if(err) throw err;
if(!user){
return done(null, false, {message: 'Unknown user.'});
};
User.comparePassword(password, user.password, function(err,isMatch) {
if (err) throw err;
console.log('in comparepassword');
if(isMatch) {
console.log('isMatch');
return done(null, user);
} else { console.log('not match');
done(null, false, {message:'Invalid username or password.'})};
})
});
} ));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.getUserById(id, function(err, user) {
done(err, user);
});
});
路由文件(理想情况下最终会将其移至我的控制器,但只想使其在某种程度上可以启动)
router.post('/dologin', function(req, res, next) {
console.log(req);
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err); }
if (!user) { console.log('nomatch');
console.log(info);
console.log('');
console.log(user);
return res.redirect('/login'); }
req.logIn(user, function(err) {
if (err) { return next(err); }
console.log('match match match');
return res.redirect('/register');
});
})(req, res, next);
});
型号
module.exports.getUserByUsername = function(username, callback){
var query = {username: username};
User.findOne(query, callback);
};
module.exports.comparePassword = function(candidatePassword, hash, callback){
bcrypt.compare(candidatePassword, hash, function(err,isMatch){
if (err) throw err;
callback(null, isMatch);
});
};
module.exports.getUserById = function(id, callback){
User.findById(id, callback);
};