feat(server): web 用户中心后端(1/3) — GetMe 补字段 + logout + redeem 路径别名 + 用户表 totp/sub_token
为 web 用户中心接通真后端做准备(保持 snake_case 不破 app): - migration 000013:users 加 sub_token / totp_secret_enc / totp_enabled。 - GetMe 扩展:补 devices_used/devices_max/quota_today_min/data_today_gb/ weekly_gb/totp_enabled/expires_at(聚合 plans+usage_daily+devices+totp 列), 保留原 expire_at 等字段不破 app。 - POST /v1/auth/logout:X-Refresh-Token 头 → RevokeRefresh,幂等 204。 - /v1/me/redeem 别名(web 用),保留 /v1/redeem(app 用)。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -270,6 +270,7 @@ func mountV1(r chi.Router, sqlDB *sql.DB, rdb *redis.Client, nodeSvc *nodes.Serv
|
||||
v1.Post("/auth/register", authHandler.Register)
|
||||
v1.Post("/auth/login", authHandler.Login)
|
||||
v1.Post("/auth/refresh", authHandler.Refresh)
|
||||
v1.Post("/auth/logout", authHandler.Logout)
|
||||
}
|
||||
|
||||
// Webhook: HMAC-authenticated, no JWT.
|
||||
@@ -283,6 +284,8 @@ func mountV1(r chi.Router, sqlDB *sql.DB, rdb *redis.Client, nodeSvc *nodes.Serv
|
||||
protected.Route("/me", func(me chi.Router) {
|
||||
me.Get("/", accountAPI.GetMe) // 子路由根,避免与 Route("/me") 冲突致 404
|
||||
devicesHandler.RegisterRoutes(me)
|
||||
// Web 用户中心调用 /v1/me/redeem;app 仍用 /v1/redeem。两者同处理器。
|
||||
me.Post("/redeem", redeemHandler.ServeHTTP)
|
||||
})
|
||||
protected.Post("/redeem", redeemHandler.ServeHTTP)
|
||||
protected.Get("/usage", usageHandler.ServeHTTP)
|
||||
|
||||
Reference in New Issue
Block a user