csauthlogic.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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/jwtkey"
  8. "ylink/apis/auth/internal/svc"
  9. "ylink/apis/auth/pb"
  10. "github.com/zeromicro/go-zero/core/logx"
  11. )
  12. type CsAuthLogic struct {
  13. ctx context.Context
  14. svcCtx *svc.ServiceContext
  15. logx.Logger
  16. }
  17. func NewCsAuthLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CsAuthLogic {
  18. return &CsAuthLogic{
  19. ctx: ctx,
  20. svcCtx: svcCtx,
  21. Logger: logx.WithContext(ctx),
  22. }
  23. }
  24. func (l *CsAuthLogic) CsAuth(in *pb.CsAuthReq) (*pb.AuthResp, error) {
  25. now := time.Now().Unix()
  26. token, err := l.generateCsToken(now, in.CsId)
  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. // generateCsToken
  44. // @Description: 客服token签发
  45. // @receiver l
  46. // @param iat
  47. // @param csId
  48. // @return string
  49. // @return error
  50. //
  51. func (l *CsAuthLogic) generateCsToken(iat int64, csId string) (string, error) {
  52. secret := l.svcCtx.Config.JwtAuth.AccessSecret
  53. expire := l.svcCtx.Config.JwtAuth.AccessExpire
  54. claims := make(jwt.MapClaims)
  55. claims["iat"] = iat
  56. claims["exp"] = iat + expire
  57. claims[jwtkey.CsId] = csId
  58. token := jwt.New(jwt.SigningMethodHS256)
  59. token.Claims = claims
  60. return token.SignedString([]byte(secret))
  61. }