[英]What am I getting wrong here
func SignInValidation(sl validator.StructLevel) {
payload := sl.Current().Interface().(SignInPayload)
user := services.FindUserByEmail(payload.Email)
if user.ID == 0 {
sl.ReportError(payload.Email, "Email", "email", "email", "Unregistered user!")
}
fmt.Println(user.Password, payload.Password)
err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(payload.Password))
fmt.Println(err)
if err != nil {
sl.ReportError(payload.Password, "Password", "password", "password", "Password is incorrect!")
}
}
以上是我登录用户的代码。 我加密用户的密码并保存到数据库。 然后到用户登录,比较散列密码和普通密码。 我收到错误crypto/bcrypt: hashedPassword is not the hash of the given password
。 怎么了?
更新:这是我的注册端点和 hash 密码的逻辑:
func SignUpMain(ctx iris.Context) orm.Users {
activationToken := uuid.NewString()
payload := orm.Users{
ActivationToken: activationToken,
ActivationState: constants.UserActivationState["PENDING"],
ActivationTokenExpiresAt: time.Now().Add(time.Hour * 24 * 7),
LastLoginAt: time.Now(),
LastLoginFromIpAddress: ctx.RemoteAddr(),
}
if err := ctx.ReadJSON(&payload); err != nil {
ctx.StopExecution()
panic("Error to read JSON")
}
hash := hashedPassword(payload.Password)
payload.Password = string(hash)
user := services.SignUp(payload)
services.GenerateToken(user, ctx)
// Notification
libs.SlackNewUser(user)
mailer.SendActivationAccountMail(user, activationToken)
return user
}
func hashedPassword(password string) []byte {
hash, err := bcrypt.GenerateFromPassword([]byte(password), 10)
if err != nil {
panic("Error to encrypt password")
}
return hash
}
首先,您需要检查数据是否正确发送。只需打印有效负载并检查值是否正确映射。 接下来,您需要检查检查是否正确完成
bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password))
Must be the already hashed PW ^ ^ Plain Text Password to compare
当我从 model 中省略密码时,就会出现问题。
Password string `gorm:"column:password;type:varchar(255)" json:"-"`
所以payload.Password
总是一个空字符串。 我刚刚将它添加到 json 标签中。 而且,问题已经解决了。
Password string `gorm:"column:password;type:varchar(255)" json:"password"`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.