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
							 | 
						||
| 
								 | 
							
								}
							 |