go - Bcrypt hashedSecret 太短而不能成为 bcrypted 密码
问题描述
我想使用 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"`
}
user-routes.go (login func)
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 |
+----+----------+----------------------------------------------------+---------+
解决方案
推荐阅读
- android - Kotlin Log.i 和 Log.e 错误
- javascript - Join 中的 Sequelize 或条件
- angular - 仅在首次登录时显示初始用户设置组件
- python - 如何添加炒作?
- docker - 在 GKE 中拉取 docker 镜像
- sql - Postgres独特的约束性能,插入+重复或检查失败?
- c# - 使用来自 OnMouseMove 的 froms OnPaint 方法中的图形绘制时的 C# 大延迟
- python - 我做了这个 Python 脚本,它应该在一个名为 diep.io 的网络游戏中自动射击方块。它不起作用,我做错了什么?
- python - 如何在表格中添加垂直标题?
- html - 无法使用具有不同 url 的同一类创建多个 html 按钮