From 984b07e2d562e3bd8a5c8f7f79b658cfd2cd2b84 Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Fri, 3 Jan 2025 02:13:31 +0800 Subject: [PATCH] =?UTF-8?q?v1.2.0=20=20=E4=BF=AE=E6=94=B9jwt=E6=9C=89?= =?UTF-8?q?=E6=95=88=E6=9C=9F=E5=92=8C=E8=8E=B7=E5=8F=96token=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/user/cmd/api/desc/user.api | 4 ++ app/user/cmd/api/etc/main.dev.yaml | 4 +- app/user/cmd/api/etc/main.yaml | 5 +- app/user/cmd/api/internal/handler/routes.go | 6 +++ .../internal/handler/user/gettokenhandler.go | 17 +++++++ .../api/internal/logic/user/gettokenlogic.go | 48 +++++++++++++++++++ .../logic/user/mobilecodeloginlogic.go | 7 ++- .../internal/logic/user/mobileloginlogic.go | 7 ++- .../api/internal/logic/user/registerlogic.go | 7 ++- .../api/internal/logic/user/wxh5authlogic.go | 7 +-- .../api/internal/service/westdexService.go | 3 +- 11 files changed, 101 insertions(+), 14 deletions(-) create mode 100644 app/user/cmd/api/internal/handler/user/gettokenhandler.go create mode 100644 app/user/cmd/api/internal/logic/user/gettokenlogic.go diff --git a/app/user/cmd/api/desc/user.api b/app/user/cmd/api/desc/user.api index eb68c83..07eb63e 100644 --- a/app/user/cmd/api/desc/user.api +++ b/app/user/cmd/api/desc/user.api @@ -52,6 +52,10 @@ service main { @doc "get user info" @handler detail get /user/detail returns (UserInfoResp) + + @doc "get new token" + @handler getToken + post /user/getToken returns (MobileCodeLoginResp) } //============================> auth v1 <============================ diff --git a/app/user/cmd/api/etc/main.dev.yaml b/app/user/cmd/api/etc/main.dev.yaml index c7ae050..8b59c57 100644 --- a/app/user/cmd/api/etc/main.dev.yaml +++ b/app/user/cmd/api/etc/main.dev.yaml @@ -8,8 +8,8 @@ CacheRedis: Type: "node" # 单节点模式 JwtAuth: AccessSecret: "WUvoIwL-FK0qnlxhvxR9tV6SjfOpeJMpKmY2QvT99lA" - AccessExpire: 86400 # JWT过期时间 - RefreshAfter: 43200 # 更新时间 + AccessExpire: 2592000 + RefreshAfter: 1296000 VerifyCode: AccessKeyID: "LTAI5tKGB3TVJbMHSoZN3yr9" AccessKeySecret: "OCQ30GWp4yENMjmfOAaagksE18bp65" diff --git a/app/user/cmd/api/etc/main.yaml b/app/user/cmd/api/etc/main.yaml index 65e2561..d30dc2e 100644 --- a/app/user/cmd/api/etc/main.yaml +++ b/app/user/cmd/api/etc/main.yaml @@ -9,8 +9,9 @@ CacheRedis: JwtAuth: AccessSecret: "WUvoIwL-FK0qnlxhvxR9tV6SjfOpeJMpKmY2QvT99lA" - AccessExpire: 86400 # JWT过期时间 - RefreshAfter: 43200 # 更新时间 + AccessExpire: 2592000 + RefreshAfter: 1296000 + VerifyCode: AccessKeyID: "LTAI5tKGB3TVJbMHSoZN3yr9" AccessKeySecret: "OCQ30GWp4yENMjmfOAaagksE18bp65" diff --git a/app/user/cmd/api/internal/handler/routes.go b/app/user/cmd/api/internal/handler/routes.go index 46d00d1..6dec284 100644 --- a/app/user/cmd/api/internal/handler/routes.go +++ b/app/user/cmd/api/internal/handler/routes.go @@ -246,6 +246,12 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/user/detail", Handler: user.DetailHandler(serverCtx), }, + { + // get new token + Method: http.MethodPost, + Path: "/user/getToken", + Handler: user.GetTokenHandler(serverCtx), + }, }, rest.WithJwt(serverCtx.Config.JwtAuth.AccessSecret), rest.WithPrefix("/api/v1"), diff --git a/app/user/cmd/api/internal/handler/user/gettokenhandler.go b/app/user/cmd/api/internal/handler/user/gettokenhandler.go new file mode 100644 index 0000000..dce90e1 --- /dev/null +++ b/app/user/cmd/api/internal/handler/user/gettokenhandler.go @@ -0,0 +1,17 @@ +package user + +import ( + "net/http" + + "qnc-server/app/user/cmd/api/internal/logic/user" + "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/common/result" +) + +func GetTokenHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + l := user.NewGetTokenLogic(r.Context(), svcCtx) + resp, err := l.GetToken() + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/user/cmd/api/internal/logic/user/gettokenlogic.go b/app/user/cmd/api/internal/logic/user/gettokenlogic.go new file mode 100644 index 0000000..eaf56d6 --- /dev/null +++ b/app/user/cmd/api/internal/logic/user/gettokenlogic.go @@ -0,0 +1,48 @@ +package user + +import ( + "context" + "github.com/pkg/errors" + "qnc-server/common/ctxdata" + jwtx "qnc-server/common/jwt" + "qnc-server/common/xerr" + "time" + + "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/user/cmd/api/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type GetTokenLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetTokenLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetTokenLogic { + return &GetTokenLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetTokenLogic) GetToken() (resp *types.MobileCodeLoginResp, err error) { + userID, err := ctxdata.GetUidFromCtx(l.ctx) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "用户信息, %+v", err) + } + token, generaErr := jwtx.GenerateJwtToken(userID, l.svcCtx.Config.JwtAuth.AccessSecret, l.svcCtx.Config.JwtAuth.AccessExpire) + if generaErr != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "更新token, 生成token失败 : %d", userID) + } + // 获取当前时间戳 + now := time.Now().Unix() + return &types.MobileCodeLoginResp{ + AccessToken: token, + AccessExpire: now + l.svcCtx.Config.JwtAuth.AccessExpire, + RefreshAfter: now + l.svcCtx.Config.JwtAuth.RefreshAfter, + }, nil + +} diff --git a/app/user/cmd/api/internal/logic/user/mobilecodeloginlogic.go b/app/user/cmd/api/internal/logic/user/mobilecodeloginlogic.go index 11bfb0e..457f172 100644 --- a/app/user/cmd/api/internal/logic/user/mobilecodeloginlogic.go +++ b/app/user/cmd/api/internal/logic/user/mobilecodeloginlogic.go @@ -11,6 +11,7 @@ import ( "qnc-server/app/user/model" jwtx "qnc-server/common/jwt" "qnc-server/common/xerr" + "time" "github.com/zeromicro/go-zero/core/logx" ) @@ -82,10 +83,12 @@ func (l *MobileCodeLoginLogic) MobileCodeLogin(req *types.MobileCodeLoginReq) (r return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "手机登录, 生成token失败 : %d", user.Id) } + // 获取当前时间戳 + now := time.Now().Unix() return &types.MobileCodeLoginResp{ AccessToken: token, - AccessExpire: l.svcCtx.Config.JwtAuth.AccessExpire, - RefreshAfter: l.svcCtx.Config.JwtAuth.RefreshAfter, + AccessExpire: now + l.svcCtx.Config.JwtAuth.AccessExpire, + RefreshAfter: now + l.svcCtx.Config.JwtAuth.RefreshAfter, }, nil } func (l *MobileCodeLoginLogic) MobileCodeLoginInside(req *types.MobileCodeLoginReq) (pass bool) { diff --git a/app/user/cmd/api/internal/logic/user/mobileloginlogic.go b/app/user/cmd/api/internal/logic/user/mobileloginlogic.go index 6db4815..7c96a76 100644 --- a/app/user/cmd/api/internal/logic/user/mobileloginlogic.go +++ b/app/user/cmd/api/internal/logic/user/mobileloginlogic.go @@ -8,6 +8,7 @@ import ( "qnc-server/common/tool" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/lzUtils" + "time" "qnc-server/app/user/cmd/api/internal/svc" "qnc-server/app/user/cmd/api/internal/types" @@ -46,9 +47,11 @@ func (l *MobileLoginLogic) MobileLogin(req *types.MobileLoginReq) (resp *types.M return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "手机登录, 生成token失败 : %d", user.Id) } + // 获取当前时间戳 + now := time.Now().Unix() return &types.MobileCodeLoginResp{ AccessToken: token, - AccessExpire: l.svcCtx.Config.JwtAuth.AccessExpire, - RefreshAfter: l.svcCtx.Config.JwtAuth.RefreshAfter, + AccessExpire: now + l.svcCtx.Config.JwtAuth.AccessExpire, + RefreshAfter: now + l.svcCtx.Config.JwtAuth.RefreshAfter, }, nil } diff --git a/app/user/cmd/api/internal/logic/user/registerlogic.go b/app/user/cmd/api/internal/logic/user/registerlogic.go index fb13d3b..e13963d 100644 --- a/app/user/cmd/api/internal/logic/user/registerlogic.go +++ b/app/user/cmd/api/internal/logic/user/registerlogic.go @@ -13,6 +13,7 @@ import ( "qnc-server/common/tool" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/lzUtils" + "time" "github.com/zeromicro/go-zero/core/logx" ) @@ -87,9 +88,11 @@ func (l *RegisterLogic) Register(req *types.RegisterReq) (resp *types.RegisterRe if generaErr != nil { return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "手机注册, 生成jwt token失败, userid: %d, err:%+v", userId, generaErr) } + // 获取当前时间戳 + now := time.Now().Unix() return &types.RegisterResp{ AccessToken: token, - AccessExpire: l.svcCtx.Config.JwtAuth.AccessExpire, - RefreshAfter: l.svcCtx.Config.JwtAuth.RefreshAfter, + AccessExpire: now + l.svcCtx.Config.JwtAuth.AccessExpire, + RefreshAfter: now + l.svcCtx.Config.JwtAuth.RefreshAfter, }, nil } diff --git a/app/user/cmd/api/internal/logic/user/wxh5authlogic.go b/app/user/cmd/api/internal/logic/user/wxh5authlogic.go index baa9a49..db39fdc 100644 --- a/app/user/cmd/api/internal/logic/user/wxh5authlogic.go +++ b/app/user/cmd/api/internal/logic/user/wxh5authlogic.go @@ -10,6 +10,7 @@ import ( "net/http" "qnc-server/app/user/model" jwtx "qnc-server/common/jwt" + "time" "qnc-server/app/user/cmd/api/internal/svc" "qnc-server/app/user/cmd/api/internal/types" @@ -90,11 +91,11 @@ func (l *WxH5AuthLogic) WxH5Auth(req *types.WXH5AuthReq) (resp *types.WXH5AuthRe return nil, errors.Wrap(genErr, "生成JWT token失败") } - // 返回登录信息 + now := time.Now().Unix() return &types.WXH5AuthResp{ AccessToken: token, - AccessExpire: l.svcCtx.Config.JwtAuth.AccessExpire, - RefreshAfter: l.svcCtx.Config.JwtAuth.RefreshAfter, + AccessExpire: now + l.svcCtx.Config.JwtAuth.AccessExpire, + RefreshAfter: now + l.svcCtx.Config.JwtAuth.RefreshAfter, }, nil } diff --git a/app/user/cmd/api/internal/service/westdexService.go b/app/user/cmd/api/internal/service/westdexService.go index 27eb412..53eb651 100644 --- a/app/user/cmd/api/internal/service/westdexService.go +++ b/app/user/cmd/api/internal/service/westdexService.go @@ -170,8 +170,9 @@ func (w *WestDexService) G05HZ01CallAPI(code string, reqData map[string]interfac if westDexResp.Code != "0000" { if westDexResp.Data == nil { return nil, errors.New(westDexResp.Message) + } else { + return westDexResp.Data, errors.New(string(westDexResp.Data)) } - return westDexResp.Data, errors.New(westDexResp.Message) } if westDexResp.Data == nil { return nil, errors.New(westDexResp.Message)