From 0a5917347645361a90ff32cabf2db8fe7180d7c5 Mon Sep 17 00:00:00 2001 From: hhs <386998068@qq.com> Date: Sun, 21 Jun 2026 22:13:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20JWT=20=E9=89=B4?= =?UTF-8?q?=E6=9D=83=E6=8B=92=E7=BB=9D=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/auth/middleware.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/backend/internal/auth/middleware.go b/backend/internal/auth/middleware.go index a932240..c563f6d 100644 --- a/backend/internal/auth/middleware.go +++ b/backend/internal/auth/middleware.go @@ -5,6 +5,8 @@ import ( "strings" "github.com/gin-gonic/gin" + + "github.com/hhs/camtalk/internal/trace" ) // contextKey 用于在 Gin context 中存储 Claims 的 key。 @@ -17,8 +19,13 @@ const ( // 校验成功后将 user_id 和 username 写入 Gin Context。 func AuthMiddleware(tokenMgr *TokenManager) gin.HandlerFunc { return func(c *gin.Context) { + log := trace.FromContext(c.Request.Context()) authHeader := c.GetHeader("Authorization") if authHeader == "" { + log.Warnw("auth rejected", + "client_ip", c.ClientIP(), + "path", c.Request.URL.Path, + "reason", "missing authorization header") c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{ "code": "INVALID_TOKEN", "message": "missing authorization header", @@ -29,6 +36,10 @@ func AuthMiddleware(tokenMgr *TokenManager) gin.HandlerFunc { // 提取 Bearer token parts := strings.SplitN(authHeader, " ", 2) if len(parts) != 2 || !strings.EqualFold(parts[0], "Bearer") { + log.Warnw("auth rejected", + "client_ip", c.ClientIP(), + "path", c.Request.URL.Path, + "reason", "invalid authorization format") c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{ "code": "INVALID_TOKEN", "message": "invalid authorization format", @@ -38,6 +49,11 @@ func AuthMiddleware(tokenMgr *TokenManager) gin.HandlerFunc { claims, err := tokenMgr.ValidateAccess(parts[1]) if err != nil { + log.Warnw("auth rejected", + "client_ip", c.ClientIP(), + "path", c.Request.URL.Path, + "reason", "invalid or expired token", + "error", err) c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{ "code": "INVALID_TOKEN", "message": "invalid or expired token",