Javascript 节点+;express+;mongoose查询身份验证
我在express中构建了一个简单的web应用程序,我在会话的身份验证中有点卡住了,当我开始构建应用程序的前端时,我最终将使用主干和regExp验证客户端中的所有内容。不,基本上我对mongoose中返回mongoose文档对象的查询有问题。我已经找到了几个解决方案,在查询中,您可以使用.lean()获取对象,或者从查询中获取返回值并应用.toObject(),所有这些都可以正常工作,但是当我尝试用字符串验证密钥的值时,它返回false。我将发布一个示例代码,它不完全是我得到的,但它足够接近,可以让人理解这一点 这将是我的模型文件的一个示例Javascript 节点+;express+;mongoose查询身份验证,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我在express中构建了一个简单的web应用程序,我在会话的身份验证中有点卡住了,当我开始构建应用程序的前端时,我最终将使用主干和regExp验证客户端中的所有内容。不,基本上我对mongoose中返回mongoose文档对象的查询有问题。我已经找到了几个解决方案,在查询中,您可以使用.lean()获取对象,或者从查询中获取返回值并应用.toObject(),所有这些都可以正常工作,但是当我尝试用字符串验证密钥的值时,它返回false。我将发布一个示例代码,它不完全是我得到的,但它足够接近,可
var User = new Schema({}, { strict: false });
User.method('authenticate', function(plainText) {
var object = this.toObject();
return plainText == object.password; });
mongoose.model('User', User);
mongoose.connect( definitions.dbConnect );
在我的应用程序文件中,我会有
app.get('/session', routes.showLogin);
app.post('/session/new', routes.login);
exports.login = function(req, res){
var userQuery = new RegExp(req.body.username , 'i');
var passwordQuery = new RegExp(req.body.password, 'i');
var Query = User.find();
Query.findOne().where('username', userQuery).exec(function(err, user){
if(user && user.authenticate((req.body.password))){
req.session.userId = user._id;
}else{
res.redirect('/session');
}
});
},
在我的路由文件中,id有如下内容
app.get('/session', routes.showLogin);
app.post('/session/new', routes.login);
exports.login = function(req, res){
var userQuery = new RegExp(req.body.username , 'i');
var passwordQuery = new RegExp(req.body.password, 'i');
var Query = User.find();
Query.findOne().where('username', userQuery).exec(function(err, user){
if(user && user.authenticate((req.body.password))){
req.session.userId = user._id;
}else{
res.redirect('/session');
}
});
},
任何想法都将受到赞赏,这可能非常愚蠢…:/
提前感谢 是的,robert klep说的没错,在我查看了mongoose文档和mongodb文档之后,很明显查询返回的是mongo文档对象,术语应转换为相同的对象或变量类型,以便opperand工作。我将首先确定
明文
和对象。密码
是什么,这可能会为您提供函数返回false
的线索。