update
This commit is contained in:
@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user