繁体   English   中英

我在这里做错了什么

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM