Mongodb Mongoose:如何访问模式方法中的select:false属性?
快速代码:Mongodb Mongoose:如何访问模式方法中的select:false属性?,mongodb,mongoose,Mongodb,Mongoose,快速代码: var userSchema = new mongoose.Schema({ username: String, password: {type: String, select: false} }); userSchema.methods.checkPassword = function(password, done) { console.log(password); // Password to check console.log(thi
var userSchema = new mongoose.Schema({
username: String,
password: {type: String, select: false}
});
userSchema.methods.checkPassword = function(password, done) {
console.log(password); // Password to check
console.log(this.password); // stored password
...
};
我不希望密码在默认情况下可以访问,但我需要一种方法来检查用户输入的密码,然后再验证用户。我知道我可以对数据库进行查询以包含这些值,但是我对如何访问schema方法本身的hidden属性有点迷茫
方法本身中的这个
只是返回的查询,所以看起来它是不可访问的?我是否应该在别处执行checkPassword()
功能?您可以使用select
在查询中选择密码。这是一个示例查询
User.findOne().select('password').exec(callback);
这必须是您要检查的密码
userSchema.methods.checkPassword = function(password, done) {
User.findOne({username: this.username}).select('password').exec(function (err, user) {
if (user.password == password)
return true;
else
return false;
});
}
我希望这可能会对您有所帮助。正确的方法是在方法findOne上编写字段。您可以询问要返回的字段。在您的情况下,它应该是:
await User.findOne({ username: this.username }, 'password').exec();
文件:
因此,似乎无法从
架构中访问select:false
属性。方法本身必须将其传递给回调。知道了!谢谢。@Khay,我收到一个错误,find()。select不是一个函数
@PulkitAggarwal请检查您用于find()
的架构名称。可能有打字错误。是否可以选择多个字段。例如const user=await user.findOne({email})。选择('emailVerified','password')代码>