From 5d8d186d7460832f2e2bf17b16200bfada0962b4 Mon Sep 17 00:00:00 2001 From: wonder Date: Mon, 25 May 2026 16:57:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20JWT=20Claims=20?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E8=BD=AC=E6=8D=A2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AuthMiddleware 中的 userID 从 JWT claims 解析时,JWT 库默认将数字字段解析为 float64 类型, 但 handler 使用 GetUint 获取,导致类型不匹配。 修复内容: - 增加 strconv 导入 - 增强类型转换逻辑,支持 float64、int、int64、uint 和 string 类型统一转换为 uint 这将确保用户登录后能正常访问需要认证的接口。 --- backend/internal/mildware/auth.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/backend/internal/mildware/auth.go b/backend/internal/mildware/auth.go index 550da71..b10a7d3 100755 --- a/backend/internal/mildware/auth.go +++ b/backend/internal/mildware/auth.go @@ -2,6 +2,7 @@ package mildware import ( "net/http" + "strconv" "strings" "gen2d/internal/logger" @@ -45,7 +46,23 @@ func AuthMiddleware(jwtSecret string) gin.HandlerFunc { } if sub, ok := claims["sub"]; ok { - c.Set("userID", sub) + var userID uint + switch v := sub.(type) { + case float64: + userID = uint(v) + case int: + userID = uint(v) + case int64: + userID = uint(v) + case uint: + userID = v + case string: + num, err := strconv.ParseUint(v, 10, 64) + if err == nil { + userID = uint(num) + } + } + c.Set("userID", userID) } c.Next()