为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
呼唤远方 2021-08-10 15:37:42
我正在调整这篇博文中的登录功能。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
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 706 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信