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] +}