我认为您遇到了我刚刚遇到的同样问题。您可以拨打此电话。几个教程让您.comparePassword()
从这样的模型中调用方法。
User.comparePassword(candidate, cb...)
这是行不通的,因为该方法位于上,schema
而不位于上model
。我能够调用该方法的唯一方法是使用标准的mongoose / mongo查询方法找到该模型的实例。
这是我的护照中间件的相关部分:
passport.use(
new LocalStrategy({
usernameField: 'email'
},
function (email: string, password: string, done: any) {
User.findOne({ email: email }, function (err: Error, user: IUserModel) {
if (err) throw err;
if (!user) return done(null, false, { msg: 'unkNown User' });
user.schema.methods.comparePassword(password, user.password, function (error: Error, isMatch: boolean) {
if (error) throw error;
if (!isMatch) return done(null, false, { msg: 'Invalid password' });
else {
console.log('it was a match'); // lost my $HÏT when I saw it
return done(null, user);
}
})
})
})
);
因此,我曾经findOne({})
获取文档实例,然后不得不通过深入研究文档上的架构属性来访问架构方法user.schema.methods.comparePassword
我注意到了几个区别: