为了账号安全,请及时绑定邮箱和手机立即绑定

自动在 gorm 中插入哈希编码数据

自动在 gorm 中插入哈希编码数据

Go
狐的传说 2022-09-26 15:17:27
我有一个表示我的用户数据的表。有一个表示电话号码的字段,我想在更新或插入时自动将其哈希存储在数据库中。所以我的模型是:type Users struct {    gorm.Model    ID          uint          `gorm:"autoIncrement;unique" json:"id"`    PhoneNumber string        `json:"phone_number"`    HashID      string        `gorm:"primaryKey" json:"hash_id"`    Name        string        `gorm:"default:dear user" json:"name"`    Rank        uint          `json:"rank"`    Score       uint          `json:"score"`    Image       string        `json:"image"`    Email       string        `json:"email"`    Address     string        `json:"address"`    Birthday    string        `json:"birthday"`    Biography   string        `json:"biography"}在插入或更新数据时,如何告诉 GORM 使用“电话号码”列的 sha256 哈希代码填充 HashID 列?
查看完整描述

1 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

你需要这样的东西:


package main


import (

    "crypto/sha256"


    "fmt"


    "gorm.io/driver/sqlite"

    "gorm.io/gorm"

)


type Users struct {

    gorm.Model

    Key  string `json:"phone_number"`

    Hash string `gorm:"primaryKey" json:"hash_id"`

}


func (u *Users) BeforeCreate(tx *gorm.DB) (err error) {

    h := sha256.Sum256([]byte(u.Key))

    u.Hash = fmt.Sprintf("%x", h[:])

    return nil

}


func (u *Users) BeforeSave(tx *gorm.DB) (err error) {

    h := sha256.Sum256([]byte(u.Key))

    u.Hash = fmt.Sprintf("%x", h[:])

    return nil

}


func main() {

    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})

    if err != nil {

        panic("failed to connect database")

    }


    db.AutoMigrate(&Users{})


    u := Users{Key: "123"}

    db.Create(&u)

}

检查 https://gorm.io/docs/index.html


查看完整回答
反对 回复 2022-09-26
  • 1 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号