From 240b1a0a26d00bdb2c9d647b614d14fcc7e10f00 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 16 Apr 2024 21:04:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20mux=E8=B7=AF=E7=94=B1=E4=B8=8A=E4=B8=8B?= =?UTF-8?q?=E6=96=87=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/core/utils/ctx/ctx.go | 48 ++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/lib/core/utils/ctx/ctx.go b/lib/core/utils/ctx/ctx.go index dfbbe924..fefb6b4c 100644 --- a/lib/core/utils/ctx/ctx.go +++ b/lib/core/utils/ctx/ctx.go @@ -10,9 +10,9 @@ import ( "path/filepath" "strings" - "be.ems/lib/core/vo" - commonConstants "be.ems/src/framework/constants/common" - tokenConst "be.ems/src/framework/constants/token" + "be.ems/src/framework/constants/token" + tokenUtils "be.ems/src/framework/utils/token" + "be.ems/src/framework/vo" "github.com/gorilla/mux" "golang.org/x/text/language" ) @@ -122,12 +122,26 @@ func SaveUploadedFile(r *http.Request, dst string) error { // Authorization 解析请求头 func Authorization(r *http.Request) string { - authHeader := r.Header.Get(tokenConst.HEADER_KEY) + // Query请求查询 + if authQuery := r.URL.Query().Get(token.ACCESS_TOKEN); authQuery != "" { + return authQuery + } + // Header请求头 + if authHeader := r.Header.Get(token.ACCESS_TOKEN); authHeader != "" { + return authHeader + } + + // Query请求查询 + if authQuery := r.URL.Query().Get(token.RESPONSE_FIELD); authQuery != "" { + return authQuery + } + // Header请求头 + authHeader := r.Header.Get(token.HEADER_KEY) if authHeader == "" { return "" } // 拆分 Authorization 请求头,提取 JWT 令牌部分 - arr := strings.Split(authHeader, tokenConst.HEADER_PREFIX) + arr := strings.Split(authHeader, token.HEADER_PREFIX) if len(arr) == 2 && arr[1] == "" { return "" } @@ -164,12 +178,24 @@ type ContextKey string // LoginUser 登录用户信息需要Authorize中间件 func LoginUser(r *http.Request) (vo.LoginUser, error) { - // 上下文 - v := r.Context().Value(ContextKey(commonConstants.CTX_LOGIN_USER)) - if v != nil { - return v.(vo.LoginUser), nil + // 获取请求头标识信息 + tokenStr := Authorization(r) + if tokenStr == "" { + return vo.LoginUser{}, fmt.Errorf("not token info") } - return vo.LoginUser{}, fmt.Errorf("No user information") + // 验证令牌 + claims, err := tokenUtils.Verify(tokenStr) + if err != nil { + return vo.LoginUser{}, fmt.Errorf("token verify fail") + } + + // 获取缓存的用户信息 + loginUser := tokenUtils.LoginUser(claims) + if loginUser.UserID == "" { + return vo.LoginUser{}, fmt.Errorf("not user info") + } + + return loginUser, nil } // LoginUserToUserID 登录用户信息-用户ID @@ -187,5 +213,5 @@ func LoginUserToUserName(r *http.Request) string { if err != nil { return "" } - return loginUser.UserName + return loginUser.User.UserName }