作業中のプロジェクトのスキーマにアタッチしたメソッドの呼び出しに関して混乱が生じています。基本的に、データベースからドキュメントにアクセスし、保存したハッシュ化されたパスワードと、ユーザーがログイン時に送信したパスワードを比較しようとしています。ただし、パスワードを比較しようとすると、スキーマのメソッド オブジェクトにアタッチしたメソッドがどこにも見つかりません。そのような方法がないことを教えてくれるエラーさえスローしません。これは、スキーマでメソッドを設定しているところです。
var Schema = mongoose.Schema;
var vendorSchema = new Schema({
//Schema properties
});
vendorSchema.pre('save', utils.hashPassword);
vendorSchema.methods.verifyPassword = utils.verifyPassword;
module.exports = mongoose.model('Vendor', vendorSchema);
私が比較メソッドとして使用している関数は、ユーティリティ ファイルに保持されている、verifyPassword という名前のユーティリティ関数です。その関数のコードは次のとおりです。
verifyPassword: function (submittedPassword) {
var savedPassword = this.password;
return bcrypt.compareAsync(submittedPassword, savedPassword);
}
次のようにパスワードを確認しようとします。
var password = req.body.password;
_findVendor(query)
.then(function (vendor) {
return vendor.verifyPassword(password);
});
それが違いを生むなら、ブルーバードの約束でマングースを約束しました。私は多くのことを試しましたが、スキーマを添付したと思っていたこのメソッドを呼び出そうとしても、なぜ何も起こらないのかについての答えが見つかりません。どんな助けでも大歓迎です。