docs(website): 添加简记memo产品原型和UI设计规范文档
- 新增「简记memo」一体化小程序产品原型设计文档 - 新增简记memo完整版UI视觉设计规范和界面细节 - 添加IDEA项目配置文件.gitignore - 创建404页面HTML文件,包含响应式布局和错误提示 - 添加关于页面HTML文件,展示品牌介绍和团队信息 - 实现AES加解密工具函数,支持请求体加密 - 添加用户协议页面基础框架
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
// JWT登录鉴权
|
||||
package utils
|
||||
|
||||
import (
|
||||
"simple-memo/global"
|
||||
"time"
|
||||
|
||||
"github.com/golang-jwt/jwt/v4"
|
||||
)
|
||||
|
||||
// Claims 自定义载荷
|
||||
type Claims struct {
|
||||
UserID uint // 用户ID
|
||||
jwt.RegisteredClaims
|
||||
}
|
||||
|
||||
// GenerateToken 生成Token
|
||||
func GenerateToken(userID uint) (string, error) {
|
||||
claims := Claims{
|
||||
UserID: userID,
|
||||
RegisteredClaims: jwt.RegisteredClaims{
|
||||
ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Duration(global.VP.GetInt("jwt.expire")) * time.Second)),
|
||||
IssuedAt: jwt.NewNumericDate(time.Now()),
|
||||
},
|
||||
}
|
||||
// 签发
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
||||
return token.SignedString([]byte(global.VP.GetString("jwt.key")))
|
||||
}
|
||||
|
||||
// GenerateTokenWithExpire 生成Token并返回过期时间
|
||||
func GenerateTokenWithExpire(userID uint) (string, int64, error) {
|
||||
expireSeconds := global.VP.GetInt("jwt.expire")
|
||||
if expireSeconds == 0 {
|
||||
expireSeconds = 7200 // 默认2小时
|
||||
}
|
||||
expiresAt := time.Now().Add(time.Duration(expireSeconds) * time.Second).UnixMilli()
|
||||
|
||||
claims := Claims{
|
||||
UserID: userID,
|
||||
RegisteredClaims: jwt.RegisteredClaims{
|
||||
ExpiresAt: jwt.NewNumericDate(time.UnixMilli(expiresAt)),
|
||||
IssuedAt: jwt.NewNumericDate(time.Now()),
|
||||
},
|
||||
}
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
||||
tokenStr, err := token.SignedString([]byte(global.VP.GetString("jwt.key")))
|
||||
return tokenStr, expiresAt, err
|
||||
}
|
||||
|
||||
// GetTokenExpireSeconds 获取配置的token过期秒数
|
||||
func GetTokenExpireSeconds() int64 {
|
||||
expireSeconds := global.VP.GetInt("jwt.expire")
|
||||
if expireSeconds == 0 {
|
||||
return 7200 // 默认2小时
|
||||
}
|
||||
return int64(expireSeconds)
|
||||
}
|
||||
|
||||
// GenerateRandomString 生成随机字符串
|
||||
func GenerateRandomString(length int) string {
|
||||
const charset = "0123456789"
|
||||
b := make([]byte, length)
|
||||
for i := range b {
|
||||
b[i] = charset[global.Rand.Intn(len(charset))]
|
||||
}
|
||||
return string(b)
|
||||
}
|
||||
|
||||
// ParseToken 解析Token
|
||||
func ParseToken(token string) (*Claims, error) {
|
||||
t, err := jwt.ParseWithClaims(token, &Claims{}, func(token *jwt.Token) (interface{}, error) {
|
||||
return []byte(global.VP.GetString("jwt.key")), nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 校验
|
||||
if claims, ok := t.Claims.(*Claims); ok && t.Valid {
|
||||
return claims, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
Reference in New Issue
Block a user