From 284329e01044768357017727332ceb5b3b76d163 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BC=9F=E4=B9=90?= Date: Wed, 30 Aug 2023 13:43:02 +0800 Subject: [PATCH] token --- api/user.ts | 12 ++++++------ cmd/ts/main.go | 2 +- middleware/jwt/default.go | 6 +----- middleware/jwt/jwt.go | 33 ++++++++++++++++++++------------- middleware/jwt/jwt_test.go | 16 ++++++++++++++++ middleware/jwt/token.go | 5 +++++ 6 files changed, 49 insertions(+), 25 deletions(-) create mode 100644 middleware/jwt/jwt_test.go diff --git a/api/user.ts b/api/user.ts index dff6deb..ee6dd78 100644 --- a/api/user.ts +++ b/api/user.ts @@ -9,21 +9,21 @@ export interface response { } export class userService{ - static async list(data :request, param?: Config):Promise{ + static async list(data :request, param?: Partial>):Promise{ return http('/api/v1/user/list', { ...param, data: data, method:'GET' }) } - static async all(data :request, param?: Config):Promise{ + static async all(data :request, param?: Partial>):Promise{ return http('/api/v1/user/all', { ...param, data: data, method:'GET' }) } - static async auto(data :request, param?: Config):Promise{ + static async auto(data :request, param?: Partial>):Promise{ return http('/api/v1/user/auto', { ...param, data: data, @@ -31,7 +31,7 @@ export class userService{ }) } //有 "user:list" - static async loginWithList(data :request, param?: Config):Promise{ + static async loginWithList(data :request, param?: Partial>):Promise{ return http('/api/v1/user/login_list', { ...param, data: data, @@ -39,14 +39,14 @@ export class userService{ }) } // 没有 "user:list" 权限 - static async login(data :request, param?: Config):Promise{ + static async login(data :request, param?: Partial>):Promise{ return http('/api/v1/user/login', { ...param, data: data, method:'GET' }) } - static async login1(data :request, param?: Config):Promise{ + static async login1(data :request, param?: Partial>):Promise{ return http('/api/v1/user/login1', { ...param, data: data, diff --git a/cmd/ts/main.go b/cmd/ts/main.go index d3a51d2..f841c19 100644 --- a/cmd/ts/main.go +++ b/cmd/ts/main.go @@ -68,7 +68,7 @@ func (u *Kit) Generate(plugin *protogen.Plugin) error { if common != "" { t.P(` `, common) } - t.P(getInd(1), `static async `, m.Desc.Name(), `(data :`, m.Input.Desc.Name(), `, param?: Config<`, m.Input.Desc.Name(), `>):Promise<`, m.Output.Desc.Name(), `>{`) + t.P(getInd(1), `static async `, m.Desc.Name(), `(data :`, m.Input.Desc.Name(), `, param?: Partial>):Promise<`, m.Output.Desc.Name(), `>{`) t.P(getInd(2), `return http<`, m.Input.Desc.Name(), `, `, m.Output.Desc.Name(), `>('`, path, `', {`) t.P(getInd(3), `...param,`) t.P(getInd(3), `data: data,`) diff --git a/middleware/jwt/default.go b/middleware/jwt/default.go index f33856f..4656e60 100644 --- a/middleware/jwt/default.go +++ b/middleware/jwt/default.go @@ -40,11 +40,7 @@ func (j *JwtDefault) GetToken(ctx context.Context, key string) (tokenStr string) } func (j *JwtDefault) ParseToken(ctx context.Context, key string, token string) (*UserInfo, error) { - userInfo, err := Parse(key, token) - if err != nil { - return nil, err - } - return userInfo, nil + return Parse(key, token) } func (j *JwtDefault) Validate(ctx context.Context, permission string, permissions []string) error { diff --git a/middleware/jwt/jwt.go b/middleware/jwt/jwt.go index df950f4..ebb444d 100644 --- a/middleware/jwt/jwt.go +++ b/middleware/jwt/jwt.go @@ -63,23 +63,30 @@ func JWT(opts ...JwtOption) middleware.Middleware { if tokenStr == "" && needAuth { return nil, errors.Unauthorized("NO_TOKEN", "") } - if tokenStr != "" { - userInfo, err := cfg.validate.ParseToken(ctx, cfg.jwtKey, tokenStr) - if err != nil { - return nil, err - } - if needAuth && userInfo.UserId == 0 { - return nil, errors.Unauthorized("TOKEN_BAD", "") - } - if authKey != "" { - if err := cfg.validate.Validate(ctx, authKey, userInfo.Permissions); err != nil { + if tokenStr != "" { + if err := func() error { + userInfo, err := cfg.validate.ParseToken(ctx, cfg.jwtKey, tokenStr) + if err != nil { + return err + } + if needAuth && userInfo.UserId == 0 { + return errors.Unauthorized("TOKEN_BAD", "") + } + if authKey != "" { + if err = cfg.validate.Validate(ctx, authKey, userInfo.Permissions); err != nil { + return err + } + } + if userInfo.UserId > 0 { + ctx = SetUserContext(ctx, userInfo) + } + return nil + }(); err != nil { + if needAuth { return nil, err } } - if userInfo.UserId > 0 { - ctx = SetUserContext(ctx, userInfo) - } } return handler(ctx, a) } diff --git a/middleware/jwt/jwt_test.go b/middleware/jwt/jwt_test.go new file mode 100644 index 0000000..fb5cdb6 --- /dev/null +++ b/middleware/jwt/jwt_test.go @@ -0,0 +1,16 @@ +package jwt + +import ( + "context" + "fmt" + "strings" + "testing" +) + +func TestA(t *testing.T) { + str := `fS6HZv4HoMo+OnaNsLuM7O4Kx9L4UrM2TdnJB/J5qK75mJiEsuTyELYxaZXkFMnqre4A1B/pzzpFNKwB4k2M2tBcrSAakYU4I+cOFRcy7ANJdjis529x8Du89Mh16ZAViCHNVs+Rp6qHFK/hjdLVEkFY7Ws2t++cu4rF+DQacs9yccoh2wTCVweNOIrGz0fOaEgVroprhP4xvvfVUj293ovCv9T+mF9qHJYmswEMOu1+UMLLf3EyBVXgxnNrHzvX` + str = strings.ReplaceAll(str, " ", "+") + + tt := &JwtDefault{} + fmt.Println(tt.ParseToken(context.Background(), "sfe023f_9fd&fwfl", str)) +} diff --git a/middleware/jwt/token.go b/middleware/jwt/token.go index 8b8792a..ae09a86 100644 --- a/middleware/jwt/token.go +++ b/middleware/jwt/token.go @@ -2,6 +2,7 @@ package jwt import ( "encoding/json" + "fmt" "git.diulo.com/mogfee/kit/errors" "git.diulo.com/mogfee/kit/internal/xuuid" "github.com/golang-jwt/jwt/v5" @@ -57,10 +58,14 @@ func Parse(key string, tokenStr string) (*UserInfo, error) { if tokenStr == "" { return &UserInfo{}, nil } + fmt.Println("111") + str, err := Decrypt(tokenStr, []byte(key), key) if err != nil { + fmt.Println("desc") return nil, err } + fmt.Println("222") token, err := jwt.Parse(str, func(token *jwt.Token) (interface{}, error) { return []byte(key), nil })