封装GenerateAccessToken方法,

设置头像和昵称默认值
This commit is contained in:
xiabin 2025-01-24 10:00:03 +08:00
parent 5acaf1028b
commit 23a91824a0
3 changed files with 50 additions and 28 deletions

View File

@ -2,12 +2,9 @@ package douyin
import ( import (
"context" "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/svc"
"gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/internal/types" "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" "github.com/zeromicro/go-zero/core/logx"
) )
@ -65,26 +62,20 @@ func (l *DouyinCode2tokenLogic) DouyinCode2token(req *types.DouyinCode2TokenRequ
Openid: res.Openid, Openid: res.Openid,
Unionid: res.Unionid, Unionid: res.Unionid,
AnonymousOpenid: res.AnonymousOpenid, AnonymousOpenid: res.AnonymousOpenid,
Nickname: svc.GetRandomUsername(),
Avatar: "https://youtukeji.com.cn/candy/images/lollipop.png",
} }
err = l.svcCtx.AppUser.FindOrCreate(l.ctx, aui) err = l.svcCtx.AppUser.FindOrCreate(l.ctx, aui)
if err != nil { if err != nil {
return return
} }
claims := make(jwt.MapClaims) resp.Token, err = l.svcCtx.GenerateAccessToken(&svc.AccessToken{
claims["exp"] = time.Now().Unix() + l.svcCtx.Config.Auth.AccessExpire
claims["iat"] = l.svcCtx.Config.Auth.AccessExpire
claims["payload"] = &svc.AccessToken{
AppId: accountId, AppId: accountId,
UserId: aui.Id, UserId: aui.Id,
AppIdStr: req.AppId, AppIdStr: req.AppId,
OpenId: res.Openid, 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 return
} }

View File

@ -3,12 +3,9 @@ package wechat
import ( import (
"context" "context"
"errors" "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/svc"
"gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/internal/types" "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" "github.com/zeromicro/go-zero/core/logx"
) )
@ -53,26 +50,20 @@ func (l *WechatCode2UserIdLogic) WechatCode2UserId(req *types.WechatCode2TokenRe
AppAccountId: accountId, AppAccountId: accountId,
Openid: res.OpenID, Openid: res.OpenID,
Unionid: res.UnionID, Unionid: res.UnionID,
Nickname: svc.GetRandomUsername(),
Avatar: "https://youtukeji.com.cn/candy/images/lollipop.png",
} }
err = l.svcCtx.AppUser.FindOrCreate(l.ctx, aui) err = l.svcCtx.AppUser.FindOrCreate(l.ctx, aui)
if err != nil { if err != nil {
return return
} }
claims := make(jwt.MapClaims) resp.Token, err = l.svcCtx.GenerateAccessToken(&svc.AccessToken{
claims["exp"] = time.Now().Unix() + l.svcCtx.Config.Auth.AccessExpire
claims["iat"] = l.svcCtx.Config.Auth.AccessExpire
claims["payload"] = &svc.AccessToken{
AppId: accountId, AppId: accountId,
UserId: aui.Id, UserId: aui.Id,
AppIdStr: req.AppId, AppIdStr: req.AppId,
OpenId: res.OpenID, OpenId: res.OpenID,
} })
token := jwt.New(jwt.SigningMethodHS256)
token.Claims = claims
resp.Token, err = token.SignedString([]byte(l.svcCtx.Config.Auth.AccessSecret))
return return
} }

View File

@ -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/internal/config"
"gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/model" "gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/model"
helper "gitea.youtukeji.com.cn/youtu/openapi-helper" helper "gitea.youtukeji.com.cn/youtu/openapi-helper"
"github.com/golang-jwt/jwt/v4"
redisCache "github.com/silenceper/wechat/v2/cache" redisCache "github.com/silenceper/wechat/v2/cache"
"github.com/zeromicro/go-zero/core/stores/sqlx" "github.com/zeromicro/go-zero/core/stores/sqlx"
"go.uber.org/zap" "go.uber.org/zap"
"go.uber.org/zap/zapcore" "go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2" "gopkg.in/natefinch/lumberjack.v2"
"math/rand"
"time"
) )
type ServiceContext struct { type ServiceContext struct {
@ -103,3 +106,40 @@ func UnmarshalAccessToken(d any) (ac AccessToken, err error) {
func GetCtxToken(ctx context.Context) (ac AccessToken, err error) { func GetCtxToken(ctx context.Context) (ac AccessToken, err error) {
return UnmarshalAccessToken(ctx.Value("payload")) 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]
}