From 13663f6c409d8639d83f25239a8de346ff2a7a65 Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Mon, 28 Aug 2023 16:58:53 +0800 Subject: [PATCH] fix --- utils/basic/request_parse.go | 92 +++++++++++++++++------------------- 1 file changed, 43 insertions(+), 49 deletions(-) diff --git a/utils/basic/request_parse.go b/utils/basic/request_parse.go index 42879699..bdf85f12 100644 --- a/utils/basic/request_parse.go +++ b/utils/basic/request_parse.go @@ -4,7 +4,6 @@ import ( "errors" "fmt" "log" - "strconv" "fusenapi/shared" "fusenapi/utils/auth" @@ -58,63 +57,58 @@ func ParseJwtToken(r *http.Request, svcCtx any) (*auth.UserInfo, error) { var userinfo *auth.UserInfo var err error // log.Println(io.ReadAll(r.Body)) - token := r.Header.Get("Authorization") - userId, err := strconv.ParseInt(token, 10, 64) + // token := r.Header.Get("Authorization") + // userId, err := strconv.ParseInt(token, 10, 64) - if err == nil { - userinfo = &auth.UserInfo{ - UserId: userId, + var secret uint64 = 0 + token, info, err := auth.ParseJwtTokenHeader[auth.UserInfo](r) //解析Token头, 和payload信息 + if err != nil { + logx.Error(err) + return nil, err + } + + 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) + us, err := shared.GetUserState(info.UserId, gdb) + + if err != nil { + log.Println(info) + logx.Error(err) + return nil, err + } + secret = us.PwdHash // 获取密码的hash做jwt, 便于重置密码的使用 + + } else if info.IsGuest() { + secret = auth.DefaultJwtSecret //获取默认的hash } - } else { - var secret uint64 = 0 - token, info, err := auth.ParseJwtTokenHeader[auth.UserInfo](r) //解析Token头, 和payload信息 + } + + if secret != 0 { + claims, err := auth.ParseJwtTokenUint64Secret(token, secret) + // 如果解析JWT token出错,则返回未授权的JSON响应并记录错误消息 if err != nil { - logx.Error(err) + log.Println(token) + if err != nil { + return nil, fmt.Errorf("unauthorized") + } return nil, err } - 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) - 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 - } - } - - if secret != 0 { - log.Println("secret != 0", info) - claims, err := auth.ParseJwtTokenUint64Secret(token, secret) - // 如果解析JWT token出错,则返回未授权的JSON响应并记录错误消息 + if claims != nil { + // 从token中获取对应的用户信息 + userinfo, err = auth.GetUserInfoFormMapClaims(claims) + // 如果获取用户信息出错,则返回未授权的JSON响应并记录错误消息 if err != nil { - log.Println(token) - if err != nil { - return nil, fmt.Errorf("unauthorized") - } - return nil, err + return nil, fmt.Errorf("unauthorized") } - - if claims != nil { - // 从token中获取对应的用户信息 - userinfo, err = auth.GetUserInfoFormMapClaims(claims) - // 如果获取用户信息出错,则返回未授权的JSON响应并记录错误消息 - if err != nil { - return nil, fmt.Errorf("unauthorized") - } - } - } else { - // 白板用户 - userinfo = &auth.UserInfo{UserId: 0, GuestId: 0} } + } else { + // 白板用户 + userinfo = &auth.UserInfo{UserId: 0, GuestId: 0} } return userinfo, nil