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