This commit is contained in:
2026-01-27 03:13:15 -08:00
parent 5def1cf6d8
commit 48c92ea374
36 changed files with 1189 additions and 123 deletions
+45 -5
View File
@@ -5,6 +5,7 @@ import (
"fmt"
"strings"
jwtGo "github.com/golang-jwt/jwt/v5"
"github.com/perfect-panel/server/pkg/constant"
"github.com/perfect-panel/server/pkg/logger"
@@ -36,7 +37,25 @@ func AuthMiddleware(svc *svc.ServiceContext) func(c *gin.Context) {
// parse token
claims, err := jwt.ParseJwtToken(token, jwtConfig.AccessSecret)
if err != nil {
logger.WithContext(c.Request.Context()).Errorw("[AuthMiddleware] parse token failed", logger.Field("error", err.Error()))
logger.WithContext(c.Request.Context()).Errorw("[AuthMiddleware] parse token failed",
logger.Field("error", err.Error()),
)
// [AuthDebug] Try to parse unverified to see why it failed (expired or invalid signature)
parser := jwtGo.NewParser()
unverifiedToken, _, _ := parser.ParseUnverified(token, jwtGo.MapClaims{})
if unverifiedToken != nil {
if unverifiedClaims, ok := unverifiedToken.Claims.(jwtGo.MapClaims); ok {
logger.WithContext(c.Request.Context()).Errorw("[AuthDebug] Token Parsing Failure Details",
logger.Field("exp", unverifiedClaims["exp"]),
logger.Field("iat", unverifiedClaims["iat"]),
logger.Field("uid", unverifiedClaims["UserId"]),
logger.Field("sid", unverifiedClaims["SessionId"]),
logger.Field("sub", unverifiedClaims["sub"]),
)
}
}
result.HttpResult(c, nil, errors.Wrapf(xerr.NewErrCode(xerr.ErrorTokenExpire), "Token Invalid"))
c.Abort()
return
@@ -60,9 +79,17 @@ func AuthMiddleware(svc *svc.ServiceContext) func(c *gin.Context) {
value, err := svc.Redis.Get(c, sessionIdCacheKey).Result()
if err != nil {
if errors.Is(err, redis.Nil) {
logger.WithContext(c.Request.Context()).Infow("[AuthMiddleware] session not found", logger.Field("sessionId", sessionId))
logger.WithContext(c.Request.Context()).Infow("[AuthMiddleware] Session无效或已过期",
logger.Field("session_id", sessionId),
logger.Field("user_id", userId),
logger.Field("redis_key", sessionIdCacheKey),
logger.Field("ip", c.ClientIP()),
logger.Field("path", c.Request.URL.Path))
} else {
logger.WithContext(c.Request.Context()).Errorw("[AuthMiddleware] redis get failed", logger.Field("error", err.Error()), logger.Field("sessionId", sessionId))
logger.WithContext(c.Request.Context()).Errorw("[AuthMiddleware] Redis 查询失败",
logger.Field("error", err.Error()),
logger.Field("session_id", sessionId),
logger.Field("redis_key", sessionIdCacheKey))
}
result.HttpResult(c, nil, errors.Wrapf(xerr.NewErrCode(xerr.InvalidAccess), "Invalid Access"))
c.Abort()
@@ -71,7 +98,10 @@ func AuthMiddleware(svc *svc.ServiceContext) func(c *gin.Context) {
//verify user id
if value != fmt.Sprintf("%v", userId) {
logger.WithContext(c.Request.Context()).Errorw("[AuthMiddleware] user mismatch", logger.Field("userId", userId), logger.Field("sessionId", sessionId), logger.Field("value", value))
logger.WithContext(c.Request.Context()).Errorw("[AuthMiddleware] user mismatch",
logger.Field("userId_in_token", userId),
logger.Field("userId_in_redis", value),
logger.Field("sessionId", sessionId))
result.HttpResult(c, nil, errors.Wrapf(xerr.NewErrCode(xerr.InvalidAccess), "Invalid Access"))
c.Abort()
return
@@ -92,7 +122,17 @@ func AuthMiddleware(svc *svc.ServiceContext) func(c *gin.Context) {
c.Abort()
return
}
logger.WithContext(c.Request.Context()).Infow("[AuthMiddleware] auth ok", logger.Field("userId", userId), logger.Field("loginType", loginType), logger.Field("path", c.Request.URL.Path))
// Get TTL details for debugging
ttl, _ := svc.Redis.TTL(c.Request.Context(), sessionIdCacheKey).Result()
logger.WithContext(c.Request.Context()).Infow("[AuthMiddleware] auth ok",
logger.Field("userId", userId),
logger.Field("loginType", loginType),
logger.Field("path", c.Request.URL.Path),
logger.Field("session_ttl", ttl.Seconds()),
logger.Field("sessionId", sessionId),
logger.Field("deviceId", deviceId),
)
ctx = context.WithValue(ctx, constant.LoginType, loginType)
ctx = context.WithValue(ctx, constant.CtxKeyUser, userInfo)
ctx = context.WithValue(ctx, constant.CtxKeySessionID, sessionId)