Node.js MongooseJS在保存数据后无法检索数据
我有一个简单的ExpressJS应用程序,我正在尝试使用passport、passport local和passport local mongoose向其添加用户身份验证,但在我将用户数据保存到db上后,mongoose无法检索到它,尽管我可以通过mongo cli查看数据 在主express模块中,我有:Node.js MongooseJS在保存数据后无法检索数据,node.js,mongoose,passport.js,passport-local,Node.js,Mongoose,Passport.js,Passport Local,我有一个简单的ExpressJS应用程序,我正在尝试使用passport、passport local和passport local mongoose向其添加用户身份验证,但在我将用户数据保存到db上后,mongoose无法检索到它,尽管我可以通过mongo cli查看数据 在主express模块中,我有: //Passport会话设置。 var User=需要(“./型号/用户”); use(新的LocalStrategy(User.authenticate()); passport.seri
//Passport会话设置。
var User=需要(“./型号/用户”);
use(新的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');
//用户模式
var User=newschema({
用户名:{type:String,必需:true,unique:true},
密码:{type:String,必需:true}
});
用户插件(passportLocalMongoose);
module.exports=mongoose.model('User',User);
在我的routes模块中,我使用以下代码创建一个用户:
router.post('/register',函数(req,res){
var u=请求主体用户名;
var p=请求主体密码;
log('为'+u+'创建帐户:'+p));
//在数据库上存储客户端
var usr=新用户({用户名:u,密码:p});
usr.save(函数(错误){
如果(错误){
控制台日志(err);
返回res.render('register',{title:'register',错误:err.userMessage});
}否则{
log('user:'+usr.username+“saved.”);
passport.authenticate('local')(请求、请求、函数(){
返回res.redirect('/dashboard');
});
}
});
});
但是,当我尝试使用passport.authenticate方法对用户进行身份验证时,mongoose无法在db中找到该用户,正如我在mongoose日志中看到的:
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 }
Mongoose正在查找名为“users”的集合,但您的数据似乎存储在“User”中。model()的API是mongoose#model(名称、[schema]、[collection]、[skipInit])。因此,您可以通过添加第三个参数(例如
module.exports = mongoose.model('User', User, 'User');
编辑1:
尝试在mongoose local中使用内置的register()方法
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
Account.register(new Account({ username: req.body.username }), req.body.password, function(err) {
if(err) {
console.log(err);
return res.render('register', {title: 'Register', error: err.userMessage});
} else {
passport.authenticate('local')(req, res, function () {
return res.redirect('/dashboard');
});
}
});
});
还是不行。插入和检索是在同一个集合上进行的,但检索没有得到任何数据。我认为还有其他问题,因为passport local mongoose没有对密码进行加密,而是以纯文本形式存储。请尝试使用mongoose local附带的.register()方法,我已更新了我的答案。谢谢!它在使用register()后工作,但我必须更改模式,以便密码不是必填字段。