【发布时间】:2017-06-29 12:31:40
【问题描述】:
我正在尝试使用 PassportJS 处理用户身份验证,但我无法让它在我的数据库设置中工作。
我正在使用 MongoDB 没有 Mongoose,我无法让 LocalStrategy 模块工作。
希望我的数据库查询阅读起来不会太麻烦。
本地策略:
passport.use(new LocalStrategy(
function(username, password, done) {
//Fire up database
mongo.connect("mongodb://localhost:27017/formulas", function(e, db) {
if (e) {return next(e);}
var col = db.collection("users");
//Do a database query to find a record by username
col.findOne({"username": username}, function(err, user){
if (err) { return done(err);}
if(!user) {
return done(null, false, { message: "Please check your log in credentials." });
}
//if it exists call done() object with user information
bcrypt.compare(password, user.password, function(err, res){
if (err) throw err;
if (res == true) {
return done(null, {username: username, password: password});
} else {
return done(null, false, { message: "Invalid password."});
}
});
});
});
}));
我这样称呼passport.authenticate():
router.post('/login',
passport.authenticate('local', {successRedirect:'/', failureRedirect:'/about',failureFlash: false}),
function(req, res){
console.log(req.body);
console.log(req.user);
console.log("The user was logged");
});
SerializeUser 和 deserializeUser 看起来像这样:
passport.serializeUser(function(user, done) {
done(null, user.username);
});
passport.deserializeUser(function(id, done) {
mongo.connect("mongodb://localhost:27017/formulas", function(e, db){
if (e) {return next(e);}
var col = db.collection("users");
col.findOne({"username": id}, function(err, user){
done(err, {"username": id});
});
});
});
当我致电app.post(/login) 时,我被直接带到/about 并且没有任何内容记录到控制台,所以我不太确定出了什么问题。
非常感谢您提供有关修复什么或如何排除故障的建议。
【问题讨论】:
标签: node.js mongodb express passport.js