我遇到了这个库的问题,因为即使给定的输入不在数据库中,这个函数也会返回 false,而实际上它应该返回 true。
type User struct {
ID uint `gorm:"primary_key"`
Username string `json:",omitempty"`
Password string `json:",omitempty"`
CreatedAt time.Time `json:",omitempty"`
}
b, err := db.Con()
if err != nil {
log.Panic(err)
}
defer db.Close()
// We want an empty struct
// Otherwise it will trigger the unique key constraint
user := []User{}
// Check if the username is taken
// BUX, MUST FIX: This always returns false for some reason
if db.Where(&User{Username: "MyUsername"}).Find(&user).RecordNotFound() == false {
fmt.Println("Username found")
} …Run Code Online (Sandbox Code Playgroud) 使用golang.org/x/crypto/bcrypt和GORM(http://gorm.io/docs/)我正在尝试加密密码。问题在于,每种加密方式每次都不同,因此它永远无法与数据库中的加密方式匹配。
var result []string
password := []byte(data.Password)
encryptedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost) // different every time
db.Where(&User{Username: strings.ToLower(data.Username)}).First(&user).Pluck("password", &result)
encryptionErr := bcrypt.CompareHashAndPassword(encryptedPassword, []byte(result[0]))
if encryptionErr == nil { // passwords match! }
Run Code Online (Sandbox Code Playgroud)
我已经确认每次输入都是相同的,并且数据库提供的密码是正确的。
我在这里做错了什么?