比较 golang 中的错误

我正在用 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"}

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


白衣非少年
浏览 232回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go