我希望使用Go创建一个用户认证系统,但在登录账户时遇到了困难。我使用bcrypt对密码进行哈希处理,然后将其保存到数据库(MySQL)中。问题出现在我想将其与插入的密码进行比较时。我遇到了这个错误:hashedSecret too short to be a bcrypted password
。我不知道我做错了什么。这是我的代码:
models.go
type User struct {
ID string `json:"id"`
Username string `json:"username"`
Password string `json:"password"`
IsAdmin bool `json:"is_admin"`
}
用户路由.go (登录函数)
err := db.QueryRow("SELECT Password FROM Users WHERE Username = ?", user.Username).Scan(&storedPass)
if err != nil {
log.Fatal(err)
}
// hashed password
fmt.Println(storedPass, []byte(storedPass))
err = bcrypt.CompareHashAndPassword([]byte(storedPass), []byte(user.Password))
if err != nil {
// Here is error
fmt.Println(err.Error())
}
user-routes.go (register func)
stmt, err := db.Prepare(`INSERT INTO Users(Username, Password, IsAdmin) VALUES (?, ?, 0)`)
if err != nil {
log.Fatal(err)
}
hash, _ := bcrypt.GenerateFromPassword([]byte(user.Password), 10)
res, err := stmt.Exec(user.Username, string(hash))
看起来错误是在我比较哈希密码和插入的密码时出现。另外,我会保存密码到数据库中而没有任何错误。
+----+----------+----------------------------------------------------+---------+
| ID | Username | Password | IsAdmin |
+----+----------+----------------------------------------------------+---------+
| 38 | test2 | $2a$10$5WwRQahtjgmaeIKRGXGZNOLVAv5EXUidRwbnZeryq9e | 0 |
+----+----------+----------------------------------------------------+---------+
varchar(50)
。 - xaos_xv