我认为您遇到了我刚刚遇到的同样问题。您可以拨打此电话。几个教程让您
.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
我注意到了几个区别:
- 我的是
instance
方法,而你的是static
方法。我相信会有类似的方法访问策略。 - 我发现我必须将哈希传递给
comparePassword()
函数。也许这对静态变量不是必需的,但是我无法访问this.password



