2025-04-09 16:56:05 +08:00
|
|
|
/*
|
|
|
|
|
@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
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-05-27 19:01:05 +08:00
|
|
|
|
|
|
|
|
// GetAccountByID 根据 ID 查询用户
|
|
|
|
|
func GetAccountByID(id uint) (*Account, error) {
|
|
|
|
|
var account Account
|
|
|
|
|
if err := DB.First(&account, id).Error; err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
return &account, nil
|
|
|
|
|
}
|