playerauthlogic.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package logic
  2. import (
  3. "context"
  4. "github.com/golang-jwt/jwt/v4"
  5. "google.golang.org/protobuf/types/known/structpb"
  6. "time"
  7. "ylink/ext/jwtdata"
  8. "ylink/apis/auth/internal/svc"
  9. "ylink/apis/auth/pb"
  10. "github.com/zeromicro/go-zero/core/logx"
  11. )
  12. type PlayerAuthLogic struct {
  13. ctx context.Context
  14. svcCtx *svc.ServiceContext
  15. logx.Logger
  16. }
  17. func NewPlayerAuthLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PlayerAuthLogic {
  18. return &PlayerAuthLogic{
  19. ctx: ctx,
  20. svcCtx: svcCtx,
  21. Logger: logx.WithContext(ctx),
  22. }
  23. }
  24. func (l *PlayerAuthLogic) PlayerAuth(in *pb.PlayerAuthReq) (*pb.AuthResp, error) {
  25. now := time.Now().Unix()
  26. token, err := l.generatePlayerToken(now, in.PlayerId, in.GameId)
  27. if err != nil {
  28. return nil, err
  29. }
  30. data, err := structpb.NewStruct(map[string]interface{}{
  31. "access_token": token,
  32. })
  33. if err != nil {
  34. return nil, err
  35. }
  36. return &pb.AuthResp{
  37. Code: 0,
  38. Msg: "success",
  39. Data: data,
  40. }, nil
  41. }
  42. //
  43. // generatePlayerToken
  44. // @Description: 玩家token签发
  45. // @receiver l
  46. // @param iat
  47. // @param playerId
  48. // @param gameId
  49. // @return string
  50. // @return error
  51. //
  52. func (l *PlayerAuthLogic) generatePlayerToken(iat int64, playerId string, gameId string) (string, error) {
  53. secret := l.svcCtx.Config.JwtAuth.AccessSecret
  54. expire := l.svcCtx.Config.JwtAuth.AccessExpire
  55. claims := make(jwt.MapClaims)
  56. claims["iat"] = iat
  57. claims["exp"] = iat + expire
  58. claims[jwtdata.JwtKeyPlayerId] = playerId
  59. claims[jwtdata.JwtKeyGameId] = gameId
  60. token := jwt.New(jwt.SigningMethodHS256)
  61. token.Claims = claims
  62. return token.SignedString([]byte(secret))
  63. }