Files
go_blog/models/account.go
2025-07-12 15:56:36 +08:00

80 lines
1.8 KiB
Go

/*
@Time : 2020/6/28 22:01
@Author : xuyiqing
@File : users.py
*/
package models
import (
"golang.org/x/crypto/bcrypt"
)
const PasswordCryptLevel = 12
type Account struct {
BaseModel
Username string `gorm:"column:username;not null;unique_index;comment:'用户名'" json:"username" form:"username"`
Password string `gorm:"column:password;comment:'密码'" form:"password" json:"-"`
Name string `form:"name" json:"name"`
IsActive bool `json:"-"`
}
func (a *Account) TableName() string {
return "user_accounts"
}
func (a *Account) GetUserByID(id uint) *Account {
DB.Model(&Account{}).First(a, id)
if a.ID > 0 {
return a
} else {
return nil
}
}
// 设置密码加密
func (a *Account) SetPassword(password string) error {
p, err := bcrypt.GenerateFromPassword([]byte(password), PasswordCryptLevel)
if err != nil {
return err
}
a.Password = string(p)
return nil
}
// 验证登录帐户密码合法性
func (a *Account) CheckPassword() bool {
password := a.Password
aa, err1 := bcrypt.GenerateFromPassword([]byte(a.Password), 12)
print(aa, err1)
DB.Where("username = ?", a.Username).First(&a)
err := bcrypt.CompareHashAndPassword([]byte(a.Password), []byte(password))
return err == nil
}
// 验证登录帐户密码合法性
func (a *Account) IsPasswordEqual(password string) bool {
err := bcrypt.CompareHashAndPassword([]byte(a.Password), []byte(password))
return err == nil
}
// 验证用户民重复
func (a *Account) CheckDuplicateUsername() bool {
var count int64
if DB.Model(&Account{}).Where("username=?", a.Username).Count(&count); count > 0 {
return false
} else {
return true
}
}
func GetAccountByID(id uint) (*Account, error) {
var account Account
if err := DB.First(&account, id).Error; err != nil {
return nil, err
}
return &account, nil
}