43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package models
 | 
						|
 | 
						|
import (
 | 
						|
	"gorm.io/gorm"
 | 
						|
 | 
						|
	"github.com/go-admin-team/go-admin-core/sdk/pkg"
 | 
						|
)
 | 
						|
 | 
						|
// BaseUser 密码登录基础用户
 | 
						|
type BaseUser struct {
 | 
						|
	Username     string `json:"username" gorm:"type:varchar(100);comment:用户名"`
 | 
						|
	Salt         string `json:"-" gorm:"type:varchar(255);comment:加盐;<-"`
 | 
						|
	PasswordHash string `json:"-" gorm:"type:varchar(128);comment:密码hash;<-"`
 | 
						|
	Password     string `json:"password" gorm:"-"`
 | 
						|
}
 | 
						|
 | 
						|
// SetPassword 设置密码
 | 
						|
func (u *BaseUser) SetPassword(value string) {
 | 
						|
	u.Password = value
 | 
						|
	u.generateSalt()
 | 
						|
	u.PasswordHash = u.GetPasswordHash()
 | 
						|
}
 | 
						|
 | 
						|
// GetPasswordHash 获取密码hash
 | 
						|
func (u *BaseUser) GetPasswordHash() string {
 | 
						|
	passwordHash, err := pkg.SetPassword(u.Password, u.Salt)
 | 
						|
	if err != nil {
 | 
						|
		return ""
 | 
						|
	}
 | 
						|
	return passwordHash
 | 
						|
}
 | 
						|
 | 
						|
// generateSalt 生成加盐值
 | 
						|
func (u *BaseUser) generateSalt() {
 | 
						|
	u.Salt = pkg.GenerateRandomKey16()
 | 
						|
}
 | 
						|
 | 
						|
// Verify 验证密码
 | 
						|
func (u *BaseUser) Verify(db *gorm.DB, tableName string) bool {
 | 
						|
	db.Table(tableName).Where("username = ?", u.Username).First(u)
 | 
						|
	return u.GetPasswordHash() == u.PasswordHash
 | 
						|
}
 |