Tôi mã hóa mật khẩu của người dùng và lưu vào db. Sau đó, để đăng nhập người dùng, so sánh mật khẩu băm và mật khẩu đơn giản, tôi nhận được lỗi crypto/bcrypt: hashedPassword is not the hash of the given password
. Chuyện gì vậy ?crypto/bcrypt: hashedPassword không phải là mã băm của mật khẩu đã cho
func encryptPassword(password string) (string, error) {
bytePass := []byte(password)
hashedPassword, err := bcrypt.GenerateFromPassword(bytePass, bcrypt.DefaultCost)
if err != nil {
log.Printf("ERROR:EncryptPassword: %s", err.Error())
}
return string(hashedPassword), err
}
func (i *Impl) Register(user User) bool {
hashedPass, err := encryptPassword(user.Password)
if err != nil {
return false
}
user.Password = hashedPass
if err := i.DB.Create(&user).Error; err != nil {
log.Printf("ERROR:Register: %s", err.Error())
return false
}
return true
}
func (i *Impl) Login(email string, password string) (User, error) {
var user User
i.DB.Where("email = ?", email).First(&user)
err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password))
if err != nil {
log.Printf("ERROR:Login: %s", err.Error())
return User{}, err
}
return user, err
}
Bạn có thể cung cấp ví dụ về nội dung của 'user.Password' – Danilo
Bạn đã so sánh các byte từ DB để đảm bảo nó được cập nhật đúng cách và không bị sửa đổi theo bất kỳ cách nào? Ví dụ: – JimB
, đây là mật khẩu băm từ db '$ 2a $ 10 $ rqHJJTHsxMbtX/5ZjG1mFuWyYbUDW1PLbfwQRN0uChwes38c/0m3e', được tạo từ' 123456'. Sau đó, tôi so sánh mật khẩu băm và mật khẩu đơn giản là '123456' @Danilo @JimB –