From 23a91824a08d14e041b0ead96e6a230dbe1e6cc8 Mon Sep 17 00:00:00 2001 From: xiabin Date: Fri, 24 Jan 2025 10:00:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=81=E8=A3=85GenerateAccessToken=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8C=20=E8=AE=BE=E7=BD=AE=E5=A4=B4=E5=83=8F?= =?UTF-8?q?=E5=92=8C=E6=98=B5=E7=A7=B0=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logic/douyin/douyin_code2token_logic.go | 19 +++------ .../wechat/wechat_code2_user_id_logic.go | 19 +++------ game_open_api/internal/svc/service_context.go | 40 +++++++++++++++++++ 3 files changed, 50 insertions(+), 28 deletions(-) diff --git a/game_open_api/internal/logic/douyin/douyin_code2token_logic.go b/game_open_api/internal/logic/douyin/douyin_code2token_logic.go index 16ffada..3759eea 100644 --- a/game_open_api/internal/logic/douyin/douyin_code2token_logic.go +++ b/game_open_api/internal/logic/douyin/douyin_code2token_logic.go @@ -2,12 +2,9 @@ package douyin import ( "context" - "gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/model" - "github.com/golang-jwt/jwt/v4" - "time" - "gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/internal/svc" "gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/internal/types" + "gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/model" "github.com/zeromicro/go-zero/core/logx" ) @@ -65,26 +62,20 @@ func (l *DouyinCode2tokenLogic) DouyinCode2token(req *types.DouyinCode2TokenRequ Openid: res.Openid, Unionid: res.Unionid, AnonymousOpenid: res.AnonymousOpenid, + Nickname: svc.GetRandomUsername(), + Avatar: "https://youtukeji.com.cn/candy/images/lollipop.png", } err = l.svcCtx.AppUser.FindOrCreate(l.ctx, aui) if err != nil { return } - claims := make(jwt.MapClaims) - claims["exp"] = time.Now().Unix() + l.svcCtx.Config.Auth.AccessExpire - claims["iat"] = l.svcCtx.Config.Auth.AccessExpire - - claims["payload"] = &svc.AccessToken{ + resp.Token, err = l.svcCtx.GenerateAccessToken(&svc.AccessToken{ AppId: accountId, UserId: aui.Id, AppIdStr: req.AppId, OpenId: res.Openid, - } - l.Logger.Debugf("payload: %+v", claims["payload"]) + }) - token := jwt.New(jwt.SigningMethodHS256) - token.Claims = claims - resp.Token, err = token.SignedString([]byte(l.svcCtx.Config.Auth.AccessSecret)) return } diff --git a/game_open_api/internal/logic/wechat/wechat_code2_user_id_logic.go b/game_open_api/internal/logic/wechat/wechat_code2_user_id_logic.go index af47eaf..cfe03af 100644 --- a/game_open_api/internal/logic/wechat/wechat_code2_user_id_logic.go +++ b/game_open_api/internal/logic/wechat/wechat_code2_user_id_logic.go @@ -3,12 +3,9 @@ package wechat import ( "context" "errors" - "gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/model" - "github.com/golang-jwt/jwt/v4" - "time" - "gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/internal/svc" "gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/internal/types" + "gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/model" "github.com/zeromicro/go-zero/core/logx" ) @@ -53,26 +50,20 @@ func (l *WechatCode2UserIdLogic) WechatCode2UserId(req *types.WechatCode2TokenRe AppAccountId: accountId, Openid: res.OpenID, Unionid: res.UnionID, + Nickname: svc.GetRandomUsername(), + Avatar: "https://youtukeji.com.cn/candy/images/lollipop.png", } - err = l.svcCtx.AppUser.FindOrCreate(l.ctx, aui) if err != nil { return } - claims := make(jwt.MapClaims) - claims["exp"] = time.Now().Unix() + l.svcCtx.Config.Auth.AccessExpire - claims["iat"] = l.svcCtx.Config.Auth.AccessExpire - - claims["payload"] = &svc.AccessToken{ + resp.Token, err = l.svcCtx.GenerateAccessToken(&svc.AccessToken{ AppId: accountId, UserId: aui.Id, AppIdStr: req.AppId, OpenId: res.OpenID, - } - token := jwt.New(jwt.SigningMethodHS256) - token.Claims = claims - resp.Token, err = token.SignedString([]byte(l.svcCtx.Config.Auth.AccessSecret)) + }) return } diff --git a/game_open_api/internal/svc/service_context.go b/game_open_api/internal/svc/service_context.go index abf6b3c..82ffc54 100644 --- a/game_open_api/internal/svc/service_context.go +++ b/game_open_api/internal/svc/service_context.go @@ -7,11 +7,14 @@ import ( "gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/internal/config" "gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/model" helper "gitea.youtukeji.com.cn/youtu/openapi-helper" + "github.com/golang-jwt/jwt/v4" redisCache "github.com/silenceper/wechat/v2/cache" "github.com/zeromicro/go-zero/core/stores/sqlx" "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" + "math/rand" + "time" ) type ServiceContext struct { @@ -103,3 +106,40 @@ func UnmarshalAccessToken(d any) (ac AccessToken, err error) { func GetCtxToken(ctx context.Context) (ac AccessToken, err error) { return UnmarshalAccessToken(ctx.Value("payload")) } + +// GenerateAccessToken 生成 JWT 认证的 token +// 会从ServiceContext中获取配置信息 +func (svc *ServiceContext) GenerateAccessToken(at *AccessToken) (token string, err error) { + claims := make(jwt.MapClaims) + claims["exp"] = time.Now().Unix() + svc.Config.Auth.AccessExpire + claims["iat"] = svc.Config.Auth.AccessExpire + claims["payload"] = at + + t := jwt.New(jwt.SigningMethodHS256) + t.Claims = claims + token, err = t.SignedString([]byte(svc.Config.Auth.AccessSecret)) + return +} + +var DefaultUsername = []string{ + "甜蜜糖果", + "糖果爱好者", + "软糖粉丝", + "巧克力糖果控", + "棒棒糖迷", + "小熊软糖达人", + "硬糖狂人", + "焦糖糖果控", + "水果糖行家", + "棉花糖达人", +} + +// GetRandomUsername 随机获取一个糖果相关的用户名 +func GetRandomUsername() string { + // 初始化随机数种子 + r := rand.New(rand.NewSource(time.Now().UnixNano())) + // 生成一个 0 到列表长度减 1 之间的随机索引 + randomIndex := r.Intn(len(DefaultUsername)) + // 根据随机索引返回对应的用户名 + return DefaultUsername[randomIndex] +}