快速代码:
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
...
};
Run Code Online (Sandbox Code Playgroud)
我不希望默认情况下可以访问该密码,但是我需要一种在验证用户身份之前对用户输入的密码进行检查的方法。我知道我可以对数据库进行查询以包含这些值,但是我对如何访问架构方法本身的hidden属性有些迷惑。this在方法本身只是返回的查询,所以似乎无法访问?我应该在checkPassword()其他地方执行此功能吗?
Den*_*hov 13
您可以明确允许在查找调用中返回密码字段(使用 {select:"false"}),并在字段前使用“+”运算符,例如:
User.findOne({}).select("+password") // "+" = allow select hidden field
Run Code Online (Sandbox Code Playgroud)
您可以用来select在查询中选择密码。这是一个示例查询。
User.findOne().select('password').exec(callback);
Run Code Online (Sandbox Code Playgroud)
这必须是您要检查密码的密码。
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;
});
}
Run Code Online (Sandbox Code Playgroud)
希望对您有所帮助。