小编Jef*_*son的帖子

当没有行时 RecordNotFound 返回 false

我遇到了这个库的问题,因为即使给定的输入不在数据库中,这个函数也会返回 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)

go go-gorm

5
推荐指数
2
解决办法
2887
查看次数

每次使用相同的输入进行Bcrypt加密都不同

使用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)

我已经确认每次输入都是相同的,并且数据库提供的密码是正确的。

我在这里做错了什么?

go

3
推荐指数
2
解决办法
1147
查看次数

标签 统计

go ×2

go-gorm ×1