[bugfix/backend] /users/me handling
This commit is contained in:
parent
823bedd1fa
commit
d8d8e4b0d7
3 changed files with 228 additions and 156 deletions
|
@ -1,7 +1,10 @@
|
|||
package middleware
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
@ -41,8 +44,61 @@ func AuthMiddleware(jwtSecret string) gin.HandlerFunc {
|
|||
}
|
||||
|
||||
if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
|
||||
c.Set("user_id", claims["sub"])
|
||||
c.Set("user_role", claims["role"])
|
||||
// 添加调试信息
|
||||
log.Debug().Interface("claims", claims).Msg("Token claims")
|
||||
|
||||
// 获取用户ID
|
||||
sub, exists := claims["sub"]
|
||||
if !exists {
|
||||
log.Error().Msg("Token does not contain sub claim")
|
||||
c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid token format"})
|
||||
c.Abort()
|
||||
return
|
||||
}
|
||||
|
||||
// 打印类型信息
|
||||
log.Debug().
|
||||
Str("type", fmt.Sprintf("%T", sub)).
|
||||
Interface("value", sub).
|
||||
Msg("User ID from token")
|
||||
|
||||
var userID int
|
||||
switch v := sub.(type) {
|
||||
case string:
|
||||
var err error
|
||||
userID, err = strconv.Atoi(v)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Str("sub", v).Msg("Failed to convert string user ID to int")
|
||||
c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid user ID format"})
|
||||
c.Abort()
|
||||
return
|
||||
}
|
||||
case float64:
|
||||
userID = int(v)
|
||||
case json.Number:
|
||||
var err error
|
||||
userID, err = strconv.Atoi(v.String())
|
||||
if err != nil {
|
||||
log.Error().Err(err).Str("sub", v.String()).Msg("Failed to convert json.Number user ID to int")
|
||||
c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid user ID format"})
|
||||
c.Abort()
|
||||
return
|
||||
}
|
||||
default:
|
||||
log.Error().
|
||||
Str("type", fmt.Sprintf("%T", sub)).
|
||||
Interface("value", sub).
|
||||
Msg("Unexpected user ID type")
|
||||
c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid user ID type"})
|
||||
c.Abort()
|
||||
return
|
||||
}
|
||||
|
||||
// 将 userID 转换为 int64 以确保类型一致性
|
||||
c.Set("user_id", int64(userID))
|
||||
if roles, ok := claims["roles"].([]interface{}); ok {
|
||||
c.Set("user_roles", roles)
|
||||
}
|
||||
c.Next()
|
||||
} else {
|
||||
c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid token"})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue