token.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * @desc:token功能
  3. * @company:云南奇讯科技有限公司
  4. * @Author: yixiaohu
  5. * @Date: 2022/3/8 15:54
  6. */
  7. package service
  8. import (
  9. "context"
  10. "github.com/gogf/gf/v2/net/ghttp"
  11. "github.com/tiger1103/gfast-token/gftoken"
  12. "github.com/tiger1103/gfast/v3/internal/app/common/consts"
  13. "github.com/tiger1103/gfast/v3/internal/app/common/model"
  14. )
  15. type IGfToken interface {
  16. GenerateToken(ctx context.Context, key string, data interface{}) (keys string, err error)
  17. Middleware(group *ghttp.RouterGroup) error
  18. ParseToken(r *ghttp.Request) (*gftoken.CustomClaims, error)
  19. IsLogin(r *ghttp.Request) (b bool, failed *gftoken.AuthFailed)
  20. GetRequestToken(r *ghttp.Request) (token string)
  21. RemoveToken(ctx context.Context, token string) (err error)
  22. }
  23. type gfTokenImpl struct {
  24. *gftoken.GfToken
  25. }
  26. var gT = gfTokenImpl{
  27. GfToken: gftoken.NewGfToken(),
  28. }
  29. func GfToken(options *model.TokenOptions) IGfToken {
  30. var fun gftoken.OptionFunc
  31. if options.CacheModel == consts.CacheModelRedis {
  32. fun = gftoken.WithGRedis()
  33. } else {
  34. fun = gftoken.WithGCache()
  35. }
  36. gT.GfToken = gftoken.NewGfToken(
  37. gftoken.WithCacheKey(options.CacheKey),
  38. gftoken.WithTimeout(options.Timeout),
  39. gftoken.WithMaxRefresh(options.MaxRefresh),
  40. gftoken.WithMultiLogin(options.MultiLogin),
  41. gftoken.WithExcludePaths(options.ExcludePaths),
  42. fun,
  43. )
  44. return &gT
  45. }