gpt4 book ai didi

go - 比较golang中的错误

转载 作者:IT王子 更新时间:2023-10-29 01:02:46 25 4
gpt4 key购买 nike

我正在用 golang 编写一个基本的密码认证系统。
我使用 bcrypt 对密码进行哈希处理并将哈希值保存在数据库中。
下面是从数据库中检索经过身份验证的帐户的函数。

func FindAccount(db *gorp.DbMap, email, password string) (*Account, error) {
account, err := FindByEmail(db, email)
if err != nil {
return nil, err
}
if account == nil {
return nil, nil
}
if err := bcrypt.CompareHashAndPassword([]byte(account.HashedPassword), []byte(password)); err != nil {
return nil, err
}
return account, nil
}

调用者:

account, err := FindAccount(db, email, password)
if err != nil {
if err == bcrypt.ErrMismatchedHashAndPassword {
log.Printf("Why doesn't this condition match?")
return nil, EmailPasswordInvalidError{}
}

log.Printf("bcrypt.Err: %p, %#v", bcrypt.ErrMismatchedHashAndPassword, bcrypt.ErrMismatchedHashAndPassword)
log.Printf("err : %p, %#v", err, err)
return nil, err
}

当我使用此代码并提供无效的电子邮件和密码时,会发生以下情况:

sessions.go:51: bcrypt.Err: 0xc2080290b0, &errors.errorString{s:"crypto/bcrypt: hashedPassword is not the hash of the given password"}
sessions.go:52: err : 0xc2080291e0, &errors.errorString{s:"crypto/bcrypt: hashedPassword is not the hash of the given password"}

为什么指针地址不一样?我们不能只比较错误吗?

最佳答案

我导入了两个 bcrypt 包..具有 FindAccount 的文件导入了 "code.google.com/p/go.crypto/bcrypt",调用者导入了 "golang.org/x/加密/bcrypt”

因此有多个

var ErrMismatchedHashAndPassword = errors.New("crypto/bcrypt: hashedPassword is not the hash of the given password")

有不同的指针。

将所有 "code.google.com/p/go.crypto/bcrypt" 替换为 "golang.org/x/crypto/bcrypt" 解决了这个问题。

关于go - 比较golang中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31000378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com