0

だから私はこの方法でスキーマを持っています:

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].

では、独自のインスタンス メソッドを呼び出すオブジェクトを参照する正しい方法は何でしょうか?

4

1 に答える 1