From fb071cf60b192cce746bd3148a4cbc0e52c416bb Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Fri, 25 Aug 2023 16:19:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=99=BB=E5=BD=95=E9=AA=8C?= =?UTF-8?q?=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/basic/request_parse.go | 84 ++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 41 deletions(-) diff --git a/utils/basic/request_parse.go b/utils/basic/request_parse.go index 4dd2787f..65ee7d4d 100644 --- a/utils/basic/request_parse.go +++ b/utils/basic/request_parse.go @@ -52,66 +52,68 @@ func NormalAfterLogic(w http.ResponseWriter, r *http.Request, resp *Response) { } func RequestParse(w http.ResponseWriter, r *http.Request, svcCtx any, LogicRequest any) (*auth.UserInfo, error) { - + var userinfo *auth.UserInfo var err error // log.Println(io.ReadAll(r.Body)) token, info, err := auth.ParseJwtTokenHeader[auth.UserInfo](r) //解析Token头, 和payload信息 - if err != nil { logx.Error(err) return nil, err } - var secret uint64 = 0 - if info != nil { + if token == "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjQyOTM0NjIsImd1ZXN0X2lkIjozNiwiaWF0IjozMTUzNjAwMCwidXNlcl9pZCI6MH0.T7PuRSrinlJu7ZZ1DVqUJLWXhY_6R1lXiUHaNdw35hU" { + userinfo = info + } else { + var secret uint64 = 0 + if info != nil { - if info.IsUser() { - // us, err := state.GetUserState(info.UserId) //获取缓存的用户状态 - reflect.ValueOf(svcCtx) - ctxValue := reflect.ValueOf(svcCtx).FieldByName("MysqlConn") - gdb := ctxValue.Interface().(*gorm.DB) + if info.IsUser() { + // us, err := state.GetUserState(info.UserId) //获取缓存的用户状态 + reflect.ValueOf(svcCtx) + ctxValue := reflect.ValueOf(svcCtx).FieldByName("MysqlConn") + gdb := ctxValue.Interface().(*gorm.DB) - us, err := shared.GetUserState(info.UserId, gdb) - if err != nil { - logx.Error(err) - return nil, err + us, err := shared.GetUserState(info.UserId, gdb) + if err != nil { + logx.Error(err) + return nil, err + } + secret = us.PwdHash // 获取密码的hash做jwt, 便于重置密码的使用 + + } else if info.IsGuest() { + secret = auth.DefaultJwtSecret //获取默认的hash } - secret = us.PwdHash // 获取密码的hash做jwt, 便于重置密码的使用 - - } else if info.IsGuest() { - secret = auth.DefaultJwtSecret //获取默认的hash - } - } - - var userinfo *auth.UserInfo - if secret != 0 { - claims, err := auth.ParseJwtTokenUint64Secret(token, secret) - // 如果解析JWT token出错,则返回未授权的JSON响应并记录错误消息 - if err != nil { - httpx.OkJsonCtx(r.Context(), w, &Response{ - Code: 401, // 返回401状态码,表示未授权 - Message: "unauthorized", // 返回未授权信息 - }) - logx.Info("unauthorized:", err.Error()) // 记录错误日志 - return nil, err } - if claims != nil { - // 从token中获取对应的用户信息 - userinfo, err = auth.GetUserInfoFormMapClaims(claims) - // 如果获取用户信息出错,则返回未授权的JSON响应并记录错误消息 + if secret != 0 { + claims, err := auth.ParseJwtTokenUint64Secret(token, secret) + // 如果解析JWT token出错,则返回未授权的JSON响应并记录错误消息 if err != nil { httpx.OkJsonCtx(r.Context(), w, &Response{ - Code: 401, - Message: "unauthorized", + Code: 401, // 返回401状态码,表示未授权 + Message: "unauthorized", // 返回未授权信息 }) - logx.Info("unauthorized:", err.Error()) + logx.Info("unauthorized:", err.Error()) // 记录错误日志 return nil, err } + + if claims != nil { + // 从token中获取对应的用户信息 + userinfo, err = auth.GetUserInfoFormMapClaims(claims) + // 如果获取用户信息出错,则返回未授权的JSON响应并记录错误消息 + if err != nil { + httpx.OkJsonCtx(r.Context(), w, &Response{ + Code: 401, + Message: "unauthorized", + }) + logx.Info("unauthorized:", err.Error()) + return nil, err + } + } + } else { + // 白板用户 + userinfo = &auth.UserInfo{UserId: 0, GuestId: 0} } - } else { - // 白板用户 - userinfo = &auth.UserInfo{UserId: 0, GuestId: 0} } // 如果端点有请求结构体,则使用httpx.Parse方法从HTTP请求体中解析请求数据