fix: mux路由上下文用户信息读取
This commit is contained in:
@@ -10,9 +10,9 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"be.ems/lib/core/vo"
|
"be.ems/src/framework/constants/token"
|
||||||
commonConstants "be.ems/src/framework/constants/common"
|
tokenUtils "be.ems/src/framework/utils/token"
|
||||||
tokenConst "be.ems/src/framework/constants/token"
|
"be.ems/src/framework/vo"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"golang.org/x/text/language"
|
"golang.org/x/text/language"
|
||||||
)
|
)
|
||||||
@@ -122,12 +122,26 @@ func SaveUploadedFile(r *http.Request, dst string) error {
|
|||||||
|
|
||||||
// Authorization 解析请求头
|
// Authorization 解析请求头
|
||||||
func Authorization(r *http.Request) string {
|
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 == "" {
|
if authHeader == "" {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
// 拆分 Authorization 请求头,提取 JWT 令牌部分
|
// 拆分 Authorization 请求头,提取 JWT 令牌部分
|
||||||
arr := strings.Split(authHeader, tokenConst.HEADER_PREFIX)
|
arr := strings.Split(authHeader, token.HEADER_PREFIX)
|
||||||
if len(arr) == 2 && arr[1] == "" {
|
if len(arr) == 2 && arr[1] == "" {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
@@ -164,12 +178,24 @@ type ContextKey string
|
|||||||
|
|
||||||
// LoginUser 登录用户信息需要Authorize中间件
|
// LoginUser 登录用户信息需要Authorize中间件
|
||||||
func LoginUser(r *http.Request) (vo.LoginUser, error) {
|
func LoginUser(r *http.Request) (vo.LoginUser, error) {
|
||||||
// 上下文
|
// 获取请求头标识信息
|
||||||
v := r.Context().Value(ContextKey(commonConstants.CTX_LOGIN_USER))
|
tokenStr := Authorization(r)
|
||||||
if v != nil {
|
if tokenStr == "" {
|
||||||
return v.(vo.LoginUser), nil
|
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
|
// LoginUserToUserID 登录用户信息-用户ID
|
||||||
@@ -187,5 +213,5 @@ func LoginUserToUserName(r *http.Request) string {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
return loginUser.UserName
|
return loginUser.User.UserName
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user