だから私はこの方法でスキーマを持っています:
UserSchema.methods.comparePassword = (candidatePassword) => {
let candidateBuf = Buffer.from(candidatePassword, 'ascii');
if (sodium.crypto_pwhash_str_verify(this.password, candidateBuf)) {
return true;
};
return false;
};
それは次のように呼ばれます:
User.find({ username: req.body.username }, function(err, user) {
isValid = user[0].comparePassword(req.body.password);
// more stuff
}
これにより、Error: argument hash must be a buffer
user[0] が有効なユーザーであることを確認できました。これは明らかにcomparePassword
メソッドの呼び出しに成功し、失敗したのは libsodium 関数であるためです。
this.password
さらにテストした結果、未定義であることが示されました。実際、メソッドでthis
は定義されていません。comparePassword
私の理解ではthis
、メソッドが呼び出されたオブジェクト、この場合はuser[0]
.
では、独自のインスタンス メソッドを呼び出すオブジェクトを参照する正しい方法は何でしょうか?