This commit is contained in:
toom1996
2026-09-07 00:01:48 +08:00
parent b049104a0b
commit 74ba700598
31 changed files with 1113 additions and 606 deletions

View File

@ -19,6 +19,8 @@ type Claims struct {
UserID uint32
Username string
Email string
// Tier 用户等级 free/vip;详情页据其拼装图片 URL(普通/高清)。
Tier string
}
// Manager 令牌签发器。通过构造函数注入密钥与有效期,避免每次调用都重新读取配置
@ -46,13 +48,14 @@ func NewManager(secret string, expireHours int) *Manager {
// Generate 签发令牌(登录成功后调用)。
//
// 构造与 Parse 对称的 Claims(uid / username / email / exp),用 HS256 签名。
// 构造与 Parse 对称的 Claims(uid / username / email / tier / exp),用 HS256 签名。
// exp 由 Manager 的 expire 决定(默认 7 天,见 NewManager)。
func (m *Manager) Generate(userID uint32, username, email string) (string, error) {
func (m *Manager) Generate(userID uint32, username, email, tier string) (string, error) {
claims := jwtlib.MapClaims{
"uid": float64(userID),
"username": username,
"email": email,
"tier": tier,
"exp": time.Now().Add(m.expire).Unix(),
}
token := jwtlib.NewWithClaims(jwtlib.SigningMethodHS256, claims)
@ -87,5 +90,11 @@ func (m *Manager) Parse(tokenStr string) (*Claims, error) {
if v, ok := raw["email"].(string); ok {
c.Email = v
}
// tier 缺省回落 free(兼容未带 tier 的旧令牌)
if v, ok := raw["tier"].(string); ok && v != "" {
c.Tier = v
} else {
c.Tier = "free"
}
return c, nil
}