2017-03-03 14 views
2

これはパスワードをハッシュのため、ボディ要求にsendedではされたパスワードを使用して、既存のモジュールに既存のパスワードを比較するための私のコードです:bcryptのハッシュエラー

 //hash password of document that use this schema 
    bcrypt.hash(user.password, null, null, function (err, hashed) { 

     if (err) { 
      throw err; 
     } else { 
      user.password = hashed; 

      //next api 
      next(); 
     } 
    }) 
}); 

userSchema.methods.comparePassword = function (password) { 

    //refer at userSchema 
    var user = this; 

    //return method of bcryot library that compare two string: original password and password hashed 
    return bcrypt.compareSync(password, user.password); 

}; 

しかし、このエラーメッセージの比較:

Uncaught, unspecified "error" event. (Not a valid BCrypt hash.) 

答えて

1

nullを2回使用しています。私はあなたがbcrypt.genSaltの機能の中にこの関数をラップしたことを賭けると思います。最初にnullと書かれているbcryptソルトに渡す必要があります。ここで

は完全な例です:

userSchema.pre('save', function (next) { 
    const SALTROUNDS = 10; // or another integer in that ballpark 
    const user = this; 
    if(!user.isModified('password')) { 
    return next(); 
    } 

    bcrypt.genSalt(SALTROUNDS, (err, salt) => { 
    if (err) { return next(err); } 

    bcrypt.hash(user.password, salt, null, (error, hash) => { 
     if (error) { return next(error); } 

     user.password = hash; 
     next(); 
    }); 
    }); 
}); 
+0

残念ながら、動作していません! – DevWeb

2

を解決します!データベースに私はハッシュされていない多くのユーザーのパスワードを持っていると私はbcrypt.compareSync (password, user.password);と、それはパスワードがハッシュされていると期待してログインしようとすると。