我有一个简单的 ExpressJS 应用程序,我正在尝试使用护照、护照本地和护照本地猫鼬向它添加用户身份验证,但是在我将用户的数据保存到数据库后,猫鼬无法检索它,尽管我可以看到通过 mongo cli 获取数据。
在主要的快递模块中,我有:
// Passport session setup.
var User = require("./models/user");
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
我的用户模型模块有:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var passportLocalMongoose = require('passport-local-mongoose');
// User Schema
var User = new Schema({
username: { type: String, required: true, unique: true },
password: { type: String, required: true}
});
User.plugin(passportLocalMongoose);
module.exports = mongoose.model('User', User);
在我的路线模块中,我使用以下代码创建了一个用户:
router.post('/register', function(req, res) {
var u = req.body.username;
var p = req.body.password;
console.log('Creating account for ' + u + ':' + p);
// Store client on DB
var usr = new User({ username: u, password: p });
usr.save(function(err) {
if(err) {
console.log(err);
return res.render('register', {title: 'Register', error: err.userMessage});
} else {
console.log('user: ' + usr.username + " saved.");
passport.authenticate('local')(req, res, function () {
return res.redirect('/dashboard');
});
}
});
});
但是,当我尝试使用 passport.authenticate 方法对用户进行身份验证时,猫鼬无法在数据库中找到该用户,正如我在猫鼬日志中看到的那样:
Login request @ 1422120637815
Mongoose: users.findOne({ username: 'e@e.com' }) { fields: undefined }
但是在 mongo cli 我可以看到数据:
> db.User.find()
{ "username" : "e@e.com", "password" : "123", "_id" : ObjectId("54c3d688fc71a4001db30612"), "__v" : 0 }