生成表结构,开始实现接口逻辑
This commit is contained in:
@ -25,7 +25,7 @@ type (
|
||||
// - Permission: 权限标识;
|
||||
// - ExpireTime: token 过期时间(可选)。
|
||||
TokenIn struct {
|
||||
UserId int // 用户 ID
|
||||
UserId int64 // 用户 ID
|
||||
Permission string // 权限标识
|
||||
ExpireTime time.Duration // 令牌有效期
|
||||
}
|
||||
@ -37,14 +37,14 @@ type (
|
||||
// - Permission: 权限标识;
|
||||
// - JTI: JWT 的唯一标识。
|
||||
TokenOut struct {
|
||||
UserId int // 用户 ID
|
||||
UserId int64 // 用户 ID
|
||||
Permission string // 权限标识
|
||||
JTI string // JWT 唯一标识
|
||||
}
|
||||
|
||||
// jwtClaims 自定义 JWT 的声明体结构,嵌入标准声明字段。
|
||||
jwtClaims struct {
|
||||
UserId int `json:"user_id"` // 用户 ID
|
||||
UserId int64 `json:"user_id"` // 用户 ID
|
||||
Permission string `json:"permission"` // 权限标识
|
||||
JTI string `json:"jti"` // 唯一标识
|
||||
jwt.RegisteredClaims
|
||||
|
||||
@ -1,32 +1,34 @@
|
||||
package utility
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"math/big"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// GenerateUserID 根据传入的用户类型生成唯一的用户ID。
|
||||
// 用户ID格式为:<PREFIX>_<16位数字字符串>,例如:QQ_2025052712345678。
|
||||
// 用户ID格式为:<PREFIX>_<17位数字字符串>,例如:QQ_20250527123456789。
|
||||
// 前缀由 userType 参数指定(例如 "qq"、"wx"),自动转换为大写。
|
||||
// 数字部分由当前时间戳与随机数拼接而成,确保唯一性。
|
||||
// 数字部分由当前时间戳(毫秒级)与4位加密随机数字拼接而成,确保唯一性。
|
||||
//
|
||||
// 参数:
|
||||
// - userType: 用户类型,如 "qq" 或 "wx"
|
||||
//
|
||||
// 返回值:
|
||||
// - string: 格式为 <大写前缀>_<16位唯一数字> 的用户ID
|
||||
// - string: 格式为 <大写前缀>_<17位唯一数字> 的用户ID
|
||||
func GenerateUserID(userType string) string {
|
||||
prefix := strings.ToUpper(userType)
|
||||
|
||||
timestamp := fmt.Sprintf("%d", time.Now().UnixNano())
|
||||
core := timestamp[:12]
|
||||
// 当前时间戳(毫秒级),长度为13位
|
||||
timestamp := fmt.Sprintf("%d", time.Now().UnixNano()/1e6)
|
||||
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
suffix := fmt.Sprintf("%04d", rand.Intn(10000))
|
||||
|
||||
idNum := core + suffix
|
||||
// 生成一个0~9999之间的随机数,补齐4位
|
||||
suffixNum, _ := rand.Int(rand.Reader, big.NewInt(10000))
|
||||
suffix := fmt.Sprintf("%04d", suffixNum.Int64())
|
||||
|
||||
// 拼接最终ID
|
||||
idNum := timestamp + suffix
|
||||
return fmt.Sprintf("%s_%s", prefix, idNum)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user