package models import ( "errors" "time" "golang.org/x/crypto/bcrypt" "gorm.io/gorm" ) type User struct { ID uint `gorm:"primarykey" json:"id"` Username string `gorm:"unique" json:"username"` Password string `json:"-"` Email string `json:"email"` Phone string `json:"phone"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type ReqApi struct { Code string `json:"code"` Message string `json:"message"` NationalId string `json:"nationalId"` Phone string `json:"phone"` Token string `json:"token"` } func (u *User) BeforeCreate(tx *gorm.DB) error { hashedPassword, err := bcrypt.GenerateFromPassword([]byte(u.Password), bcrypt.DefaultCost) if err != nil { return err } u.Password = string(hashedPassword) return nil } func (u *User) ComparePassword(password string) error { //直接比较密码,不用bcrypt if u.Password == password { return nil } else { return errors.New("error password") // bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(password)) } }