package model import ( "crypto/aes" "crypto/cipher" "encoding/base64" "log" "math/rand" ) type Admin struct { Id interface{} `json:"id" bson:"_id"` // 自增ID Username string `json:"username" bson:"username"` // 用户名 Password string `json:"password" bson:"password"` // 密码 RealName string `json:"real_name" bson:"real_name"` // 真实姓名 Pid string `json:"pid" bson:"pid"` // 父级ID RoleId string `json:"role_id" bson:"role_id"` // 角色ID Status int `json:"status" bson:"status"` // 状态 0:禁用 1:启用 ManagerAuth int8 `json:"manager_auth" bson:"manager_auth"` // 管理员权限 LastLoginIp string `json:"last_login_ip" bson:"last_login_ip"` // 最后登录IP LastLoginTime int64 `json:"last_login_time" bson:"last_login_time"` // 最后登录时间 CreatedAt int64 `json:"created_at" bson:"created_at"` UpdatedAt int64 `json:"updated_at" bson:"updated_at"` DeletedAt int64 `json:"deleted_at" bson:"deleted_at"` } func (a *Admin) TableName() string { return "admin" } const tokenLength = 32 // 定义token长度 // GenerateToken 生成一个安全的token字符串 func (a *Admin) GenerateToken() (string, error) { key := make([]byte, 32) // AES-256 key length _, err := rand.Read(key) if err != nil { log.Printf("Failed to generate random key: %s", err) return "", err } block, err := aes.NewCipher(key) if err != nil { log.Printf("Failed to create AES cipher: %s", err) return "", err } token := make([]byte, tokenLength) gcm, err := cipher.NewGCM(block) if err != nil { log.Printf("Failed to create GCM: %s", err) return "", err } nonce := make([]byte, gcm.NonceSize()) _, err = rand.Read(nonce) if err != nil { log.Printf("Failed to generate random nonce: %s", err) return "", err } token = gcm.Seal(nil, nonce, token, nil) return base64.URLEncoding.EncodeToString(token), nil } func (a *Admin) GetID() interface{} { return a.Id }