第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 BeforeUpdate 的 gorm 哈希密碼不會使用哈希值更新密碼

使用 BeforeUpdate 的 gorm 哈希密碼不會使用哈希值更新密碼

Go
BIG陽 2022-06-27 10:04:23
我有一個非常簡單的User模型,我的整個模型main.go如下package mainimport (  "fmt"  "github.com/jinzhu/gorm"  _ "github.com/jinzhu/gorm/dialects/mysql"  "golang.org/x/crypto/bcrypt")// User : the user data modeltype User struct {  gorm.Model  Username string `gorm:"type:varchar(40);unique" json:"username,omitempty"`  Password string `gorm:"size:255" json:"password,omitempty"`}// BeforeSave : hook before a user is savedfunc (u *User) BeforeSave(scope *gorm.Scope) (err error) {  fmt.Println("before save")  fmt.Println(u.Password)  if u.Password != "" {     hash, err := MakePassword(u.Password)     if err != nil {        return nil     }     u.Password = hash  }  fmt.Println(u.Password)  return}// MakePassword : Encrypt user passwordfunc MakePassword(password string) (string, error) {  bytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)  return string(bytes), err}func main() {  var connectionString = fmt.Sprintf(    "%s:%s@/%s?charset=utf8&parseTime=True&loc=Local",    "root", "password", "project",  )  db, _ := gorm.Open("mysql", connectionString)  db.AutoMigrate(&User{})  db.Save(&User{    Username: "name1",    Password: "123",  })  db.Model(&User{    Model: gorm.Model{ID: 1},  }).Update(&User{    Username: "name2",    Password: "12345",  })}我第一次創(chuàng)建密碼并保存為哈希字符串(我注釋掉了第二個更新部分并測試了它),但是當我更新它時,它被保存為純文本。從控制臺,我可以看到Println消息,BeforeUpdate被觸發(fā),我看到它的純密碼和 MD5,但在數(shù)據(jù)庫中,它被保存為純文本。before save123$2a$10$Vknv/uu7tAPRQSddPVlQ7OodIHZJmRPKktjb98U8U5.GT/OLQeQE2before save12345$2a$10$K0ZkLH7slfiFmkOe5DTKr.DGNvR6HtpjxCS/1svf2ZEvfTXVkMkvu關(guān)于如何修復它的任何想法?
查看完整描述

2 回答

?
米脂

TA貢獻1836條經(jīng)驗 獲得超3個贊

根據(jù)文檔,為了更改正在更新的值,您必須通過 gorm Scope 參數(shù)設(shè)置它們。在這種情況下, User 結(jié)構(gòu)并不意味著用于修改。您應該改用 SetColumn。


// BeforeUpdate : hook before a user is updated

func (u *User) BeforeUpdate(scope *gorm.Scope) (err error) {

    fmt.Println("before update")

    fmt.Println(u.Password)


    if u.Password != "" {

        hash, err := MakePassword(u.Password)

        if err != nil {

            return nil

        }

        scope.SetColumn("Password", hash)

    }


    fmt.Println(u.Password)

    return

}


查看完整回答
反對 回復 2022-06-27
?
一只萌萌小番薯

TA貢獻1795條經(jīng)驗 獲得超7個贊

我認為問題是在這里你更新用戶時有一個觸發(fā)器,你可以在這里改變邏輯,你的密碼不應該散列,希望對你有好處


func (u *User) BeforeSave(scope *gorm.Scope) (err error) {

 fmt.Println("before save")

 fmt.Println(u.Password)

 if u.Password != "" {

 hash, err := MakePassword(u.Password)

 if err != nil {

    return nil

 }

 u.Password = hash

 }


 fmt.Println(u.Password)

 return

}


查看完整回答
反對 回復 2022-06-27
  • 2 回答
  • 0 關(guān)注
  • 219 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號