猫鼬:如何在模式方法中访问 select:false 属性?

Mongoose: How can I access a select:false property in a schema method?

快捷码:

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
    ...
};

我不希望默认情况下可以访问密码,但我需要一种方法来在对用户进行身份验证之前检查用户输入的密码。我知道我可以查询数据库以包含这些值,但我对如何访问架构方法本身的隐藏 属性 有点迷茫。方法中的this本身就是返回的query,貌似访问不了?我应该在其他地方执行 checkPassword() 功能吗?

您可以使用select到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 上编写字段。您可以询问您想要的字段 return。在你的情况下,它应该是:

await User.findOne({ username: this.username }, 'password').exec();

文档: mongoose.findOne

您可以明确允许在查找调用中返回密码字段(使用 {select:"false"})在字段前使用“+”运算符例如:

User.findOne({}).select("+password") // "+" = allow select hidden field