master
李伟乐 1 year ago
parent 995f16c169
commit 284329e010
  1. 12
      api/user.ts
  2. 2
      cmd/ts/main.go
  3. 6
      middleware/jwt/default.go
  4. 33
      middleware/jwt/jwt.go
  5. 16
      middleware/jwt/jwt_test.go
  6. 5
      middleware/jwt/token.go

@ -9,21 +9,21 @@ export interface response {
} }
export class userService{ export class userService{
static async list(data :request, param?: Config<request>):Promise<response>{ static async list(data :request, param?: Partial<Config<request>>):Promise<response>{
return http<request, response>('/api/v1/user/list', { return http<request, response>('/api/v1/user/list', {
...param, ...param,
data: data, data: data,
method:'GET' method:'GET'
}) })
} }
static async all(data :request, param?: Config<request>):Promise<response>{ static async all(data :request, param?: Partial<Config<request>>):Promise<response>{
return http<request, response>('/api/v1/user/all', { return http<request, response>('/api/v1/user/all', {
...param, ...param,
data: data, data: data,
method:'GET' method:'GET'
}) })
} }
static async auto(data :request, param?: Config<request>):Promise<response>{ static async auto(data :request, param?: Partial<Config<request>>):Promise<response>{
return http<request, response>('/api/v1/user/auto', { return http<request, response>('/api/v1/user/auto', {
...param, ...param,
data: data, data: data,
@ -31,7 +31,7 @@ export class userService{
}) })
} }
//有 "user:list" //有 "user:list"
static async loginWithList(data :request, param?: Config<request>):Promise<response>{ static async loginWithList(data :request, param?: Partial<Config<request>>):Promise<response>{
return http<request, response>('/api/v1/user/login_list', { return http<request, response>('/api/v1/user/login_list', {
...param, ...param,
data: data, data: data,
@ -39,14 +39,14 @@ export class userService{
}) })
} }
// 没有 "user:list" 权限 // 没有 "user:list" 权限
static async login(data :request, param?: Config<request>):Promise<response>{ static async login(data :request, param?: Partial<Config<request>>):Promise<response>{
return http<request, response>('/api/v1/user/login', { return http<request, response>('/api/v1/user/login', {
...param, ...param,
data: data, data: data,
method:'GET' method:'GET'
}) })
} }
static async login1(data :request, param?: Config<request>):Promise<response>{ static async login1(data :request, param?: Partial<Config<request>>):Promise<response>{
return http<request, response>('/api/v1/user/login1', { return http<request, response>('/api/v1/user/login1', {
...param, ...param,
data: data, data: data,

@ -68,7 +68,7 @@ func (u *Kit) Generate(plugin *protogen.Plugin) error {
if common != "" { if common != "" {
t.P(` `, 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<Config<`, m.Input.Desc.Name(), `>>):Promise<`, m.Output.Desc.Name(), `>{`)
t.P(getInd(2), `return http<`, m.Input.Desc.Name(), `, `, m.Output.Desc.Name(), `>('`, path, `', {`) t.P(getInd(2), `return http<`, m.Input.Desc.Name(), `, `, m.Output.Desc.Name(), `>('`, path, `', {`)
t.P(getInd(3), `...param,`) t.P(getInd(3), `...param,`)
t.P(getInd(3), `data: data,`) t.P(getInd(3), `data: data,`)

@ -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) { func (j *JwtDefault) ParseToken(ctx context.Context, key string, token string) (*UserInfo, error) {
userInfo, err := Parse(key, token) return Parse(key, token)
if err != nil {
return nil, err
}
return userInfo, nil
} }
func (j *JwtDefault) Validate(ctx context.Context, permission string, permissions []string) error { func (j *JwtDefault) Validate(ctx context.Context, permission string, permissions []string) error {

@ -63,23 +63,30 @@ func JWT(opts ...JwtOption) middleware.Middleware {
if tokenStr == "" && needAuth { if tokenStr == "" && needAuth {
return nil, errors.Unauthorized("NO_TOKEN", "") 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 tokenStr != "" {
if err := cfg.validate.Validate(ctx, authKey, userInfo.Permissions); err != nil { 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 return nil, err
} }
} }
if userInfo.UserId > 0 {
ctx = SetUserContext(ctx, userInfo)
}
} }
return handler(ctx, a) return handler(ctx, a)
} }

@ -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))
}

@ -2,6 +2,7 @@ package jwt
import ( import (
"encoding/json" "encoding/json"
"fmt"
"git.diulo.com/mogfee/kit/errors" "git.diulo.com/mogfee/kit/errors"
"git.diulo.com/mogfee/kit/internal/xuuid" "git.diulo.com/mogfee/kit/internal/xuuid"
"github.com/golang-jwt/jwt/v5" "github.com/golang-jwt/jwt/v5"
@ -57,10 +58,14 @@ func Parse(key string, tokenStr string) (*UserInfo, error) {
if tokenStr == "" { if tokenStr == "" {
return &UserInfo{}, nil return &UserInfo{}, nil
} }
fmt.Println("111")
str, err := Decrypt(tokenStr, []byte(key), key) str, err := Decrypt(tokenStr, []byte(key), key)
if err != nil { if err != nil {
fmt.Println("desc")
return nil, err return nil, err
} }
fmt.Println("222")
token, err := jwt.Parse(str, func(token *jwt.Token) (interface{}, error) { token, err := jwt.Parse(str, func(token *jwt.Token) (interface{}, error) {
return []byte(key), nil return []byte(key), nil
}) })

Loading…
Cancel
Save