猿问

hashedSecret 太短,不能成为 bcrypted 密码而不是 auth

我正在调整这篇博文中的登录功能。User 结构体(见下文)有四个字段,id、name、email 和 password。您可以在下面的数据库中看到一行。将fmt.Println在登录功能向用户显示是这样的数据库查询后


 &{3 testuser $2a$10$hS7sth8jIBN2/IXFTWBibu3Ko5BXm9zHO5AJZRAbAOQ04uv.Gs5Ym [116 101 115 116 117 115 101 114 64 103 109 97 105 108 46 99 111 109]}

换句话说,它有id(3)、name(testuser)、散列密码,但还有一组数字,这让我有点惊讶,因为它不在数据库的行中(见下文)。您还会注意到fmt.Println没有显示电子邮件,即使它在数据库的行中可见,所以这里似乎有问题。


当 bcrypt 比较Login函数中的哈希值和密码时,它给了我这个错误


hashedSecret too short to be a bcrypted password not auth

你能解释为什么会抛出这个错误吗?


func Login(password, email string) (u *User, err error) {

    u = &User{}

    err = db.QueryRow("select * from users where email=$1 ", email).Scan(&u.Id, &u.Name, &u.Password, &u.Email)

    fmt.Println("u", u)


    if err != nil {

        fmt.Println("err", err)

    }   


    err = bcrypt.CompareHashAndPassword(u.Password, []byte(password))

    if err != nil {

        u = nil

    }

    return

}

我有一个包含以下字段的用户结构


type User struct {

    Id       int

    Name     string

    Email    string

    Password []byte

}

我像这样在 postgres 中为它创建了一个表


CREATE TABLE "public"."users" (

    "id" int4 NOT NULL DEFAULT nextval('users_id_seq'::regclass),

    "username" varchar(255) NOT NULL COLLATE "default",

    "email" varchar(255) NOT NULL COLLATE "default",

    "password" bytea 

)

WITH (OIDS=FALSE);

这是数据库中的一行


id |  username  |        email         |                                                          password                                                          

----+------------+----------------------+----------------------------------------------------------------------------------------------------------------------------

  3 | testuser   | testuser@gmail.com   | \x24326124313024685337737468386a49424e322f495846545742696275334b6f3542586d397a484f35414a5a524162414f51303475762e477335596d


呼唤远方
浏览 707回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答