From 391a9d348190174ac7660422c771cb9d5a8c7866 Mon Sep 17 00:00:00 2001 From: lianghuanjie Date: Wed, 18 Dec 2024 15:41:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=97=A0token=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E5=8F=96=E4=BB=BB=E5=8A=A1=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/api/nova-task.api | 14 ++++-- doc/swagger/nova-task.json | 5 -- internal/handler/routes.go | 18 +++++--- .../handler/task/get_task_list_handler.go | 5 +- internal/logic/task/get_task_list_logic.go | 13 ++++-- internal/pkg/encrypt/jwt/jwt.go | 46 +++++++++---------- 6 files changed, 55 insertions(+), 46 deletions(-) diff --git a/doc/api/nova-task.api b/doc/api/nova-task.api index 82cb2af..3ecd187 100644 --- a/doc/api/nova-task.api +++ b/doc/api/nova-task.api @@ -1,15 +1,21 @@ syntax = "v1" +@server ( + prefix: /gapi/task/v1 + group: task +) +service novatask { + @doc "获取任务列表" + @handler GetTaskList + get /tasks (GetTaskListReq) returns (GetTaskListResp) +} + @server ( prefix: /gapi/task/v1 group: task jwt: Auth ) service novatask { - @doc "获取任务列表" - @handler GetTaskList - get /tasks (GetTaskListReq) returns (GetTaskListResp) - @doc "校验任务结果" @handler VerifyTaskResult get /task/:id (TaskIdPath) returns (VerifyTaskResultResp) diff --git a/doc/swagger/nova-task.json b/doc/swagger/nova-task.json index d4f27de..2dc6008 100644 --- a/doc/swagger/nova-task.json +++ b/doc/swagger/nova-task.json @@ -102,11 +102,6 @@ ], "consumes": [ "multipart/form-data" - ], - "security": [ - { - "apiKey": [] - } ] } } diff --git a/internal/handler/routes.go b/internal/handler/routes.go index 5ec6a4a..3604d21 100644 --- a/internal/handler/routes.go +++ b/internal/handler/routes.go @@ -13,6 +13,18 @@ import ( ) func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { + server.AddRoutes( + []rest.Route{ + { + // 获取任务列表 + Method: http.MethodGet, + Path: "/tasks", + Handler: task.GetTaskListHandler(serverCtx), + }, + }, + rest.WithPrefix("/gapi/task/v1"), + ) + server.AddRoutes( []rest.Route{ { @@ -27,12 +39,6 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/task/:id", Handler: task.VerifyTaskResultHandler(serverCtx), }, - { - // 获取任务列表 - Method: http.MethodGet, - Path: "/tasks", - Handler: task.GetTaskListHandler(serverCtx), - }, }, rest.WithJwt(serverCtx.Config.Auth.AccessSecret), rest.WithPrefix("/gapi/task/v1"), diff --git a/internal/handler/task/get_task_list_handler.go b/internal/handler/task/get_task_list_handler.go index caffbb1..3e80c2e 100644 --- a/internal/handler/task/get_task_list_handler.go +++ b/internal/handler/task/get_task_list_handler.go @@ -4,6 +4,7 @@ import ( "github.com/zeromicro/go-zero/rest/httpx" "net/http" "nova_task/internal/logic/task" + "nova_task/internal/pkg/encrypt/jwt" "nova_task/internal/svc" "nova_task/internal/types" ) @@ -17,8 +18,10 @@ func GetTaskListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return } + uid, _ := jwt.ParseUid(r, svcCtx.Config.Auth.AccessSecret) + l := task.NewGetTaskListLogic(r.Context(), svcCtx) - resp, err := l.GetTaskList(&req) + resp, err := l.GetTaskList(uid, &req) if err != nil { httpx.ErrorCtx(r.Context(), w, err) } else { diff --git a/internal/logic/task/get_task_list_logic.go b/internal/logic/task/get_task_list_logic.go index 3cf8ef8..2e58d9c 100644 --- a/internal/logic/task/get_task_list_logic.go +++ b/internal/logic/task/get_task_list_logic.go @@ -28,8 +28,8 @@ func NewGetTaskListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetTa } } -func (l *GetTaskListLogic) GetTaskList(req *types.GetTaskListReq) (*types.GetTaskListResp, error) { - uid := cast.ToStringMapInt(l.ctx.Value("data"))["id"] +func (l *GetTaskListLogic) GetTaskList(uid int, req *types.GetTaskListReq) (*types.GetTaskListResp, error) { + //uid := cast.ToStringMapInt(l.ctx.Value("data"))["id"] tasks, err := l.svcCtx.TaskModel.FindTasksByCommunity(l.ctx, req.CommunityId) if err != nil { l.Errorw("get task list failed", logx.Field("err", err), logx.Field("communityId", req.CommunityId)) @@ -43,10 +43,13 @@ func (l *GetTaskListLogic) GetTaskList(req *types.GetTaskListReq) (*types.GetTas taskSeq = cast.ToInt(time.Now().Format("20060102")) } var finishState int8 - tp, err := l.svcCtx.TaskProgressModel.FindOneByUidTaskIdTaskSeq(l.ctx, uid, t.CommunityId, taskSeq) - if err == nil { - finishState = tp.Stage + if uid > 0 { + tp, err := l.svcCtx.TaskProgressModel.FindOneByUidTaskIdTaskSeq(l.ctx, uid, t.CommunityId, taskSeq) + if err == nil { + finishState = tp.Stage + } } + resp.Tasks = append(resp.Tasks, types.Task{ Id: t.Id, Title: t.Title, diff --git a/internal/pkg/encrypt/jwt/jwt.go b/internal/pkg/encrypt/jwt/jwt.go index 86952fd..32da7d3 100644 --- a/internal/pkg/encrypt/jwt/jwt.go +++ b/internal/pkg/encrypt/jwt/jwt.go @@ -40,67 +40,63 @@ func (b *TokenBuilder) GenerateToken(kvs map[string]any) (string, int64, error) return tkStr, expiredAt, err } -func (b *TokenBuilder) ParseUidFromToken(tokenStr string) (string, string, string, int64, error) { +func (b *TokenBuilder) ParseUidFromToken(tokenStr string) (int, int64, error) { r := &http.Request{Header: http.Header{}} r.Header.Set("Authorization", fmt.Sprintf("Bearer %s", tokenStr)) parser := token.NewTokenParser() tok, err := parser.ParseToken(r, b.config.AccessSecret, "") if err != nil { - return "", "", "", 0, err + return 0, 0, err } if !tok.Valid { - return "", "", "", 0, errors.New("token is invalid") + return 0, 0, errors.New("token is invalid") } - var appid, userId, tgId string + var userId int var expiredAt int64 if claims, ok := tok.Claims.(jwt.MapClaims); ok { - if uid, ok := claims["uid"]; ok { - userId = cast.ToString(uid) - } - if aid, ok := claims["app_id"]; ok { - appid = cast.ToString(aid) - } - if tid, ok := claims["tg_id"]; ok { - tgId = cast.ToString(tid) + if data, ok := claims["data"]; ok { + userId, _ = cast.ToStringMapInt(data)["id"] } if exp, ok := claims["exp"]; ok { expiredAt = cast.ToInt64(exp) } } - return appid, userId, tgId, expiredAt, nil + return userId, expiredAt, nil } // ParseUid 解析出uid -func (b *TokenBuilder) ParseUid(r *http.Request) (string, error) { +func (b *TokenBuilder) ParseUid(r *http.Request) (int, error) { parser := token.NewTokenParser() tok, err := parser.ParseToken(r, b.config.AccessSecret, "") if err != nil { - return "", err + return 0, err } if !tok.Valid { - return "", errors.New("token is invalid") + return 0, errors.New("token is invalid") } if claims, ok := tok.Claims.(jwt.MapClaims); ok { - if uid, ok := claims["uid"]; ok { - return cast.ToString(uid), nil + if data, ok := claims["data"]; ok { + uid, _ := cast.ToStringMapInt(data)["id"] + return uid, nil } } - return "", errors.New("token not exist uid") + return 0, errors.New("token not exist uid") } -func ParseUid(r *http.Request, accessSecret string) (string, error) { +func ParseUid(r *http.Request, accessSecret string) (int, error) { parser := token.NewTokenParser() tok, err := parser.ParseToken(r, accessSecret, "") if err != nil { - return "", err + return 0, err } if !tok.Valid { - return "", errors.New("token is invalid") + return 0, errors.New("token is invalid") } if claims, ok := tok.Claims.(jwt.MapClaims); ok { - if uid, ok := claims["uid"]; ok { - return cast.ToString(uid), nil + if data, ok := claims["data"]; ok { + uid, _ := cast.ToStringMapInt(data)["id"] + return uid, nil } } - return "", errors.New("token not exist uid") + return 0, errors.New("token not exist uid") }