From bdd2be5dc57c5b3e79a42647c0638aec29d6767d Mon Sep 17 00:00:00 2001 From: lafay <2021211506@stu.hit.edu.cn> Date: Sun, 30 Nov 2025 19:00:59 +0800 Subject: [PATCH] refactor: update user serialization in Yggdrasil handler to use SerializeUser for improved properties handling --- internal/handler/yggdrasil_handler.go | 6 ++---- internal/service/serialize_service.go | 19 +++++++++++++++++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/internal/handler/yggdrasil_handler.go b/internal/handler/yggdrasil_handler.go index 3db1081..de30889 100644 --- a/internal/handler/yggdrasil_handler.go +++ b/internal/handler/yggdrasil_handler.go @@ -234,10 +234,8 @@ func Authenticate(c *gin.Context) { response.SelectedProfile = service.SerializeProfile(db, loggerInstance, redisClient, *selectedProfile) } if request.RequestUser { - response.User = map[string]interface{}{ - "id": userId, - "properties": user.Properties, - } + // 使用 SerializeUser 来正确处理 Properties 字段 + response.User = service.SerializeUser(loggerInstance, user, UUID) } // 返回认证响应 diff --git a/internal/service/serialize_service.go b/internal/service/serialize_service.go index 8feb83e..2400522 100644 --- a/internal/service/serialize_service.go +++ b/internal/service/serialize_service.go @@ -91,8 +91,23 @@ func SerializeUser(logger *zap.Logger, u *model.User, UUID string) map[string]in } data := map[string]interface{}{ - "id": UUID, - "properties": u.Properties, + "id": UUID, } + + // 正确处理 *datatypes.JSON 指针类型 + // 如果 Properties 为 nil,则设置为 nil;否则解引用并解析为 JSON 值 + if u.Properties == nil { + data["properties"] = nil + } else { + // datatypes.JSON 是 []byte 类型,需要解析为实际的 JSON 值 + var propertiesValue interface{} + if err := json.Unmarshal(*u.Properties, &propertiesValue); err != nil { + logger.Warn("[WARN] 解析用户Properties失败,使用空值", zap.Error(err)) + data["properties"] = nil + } else { + data["properties"] = propertiesValue + } + } + return data }