token.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. }
  21. type gfTokenImpl struct {
  22. *gftoken.GfToken
  23. }
  24. var gT = gfTokenImpl{
  25. GfToken: gftoken.NewGfToken(),
  26. }
  27. func GfToken(options *model.TokenOptions) IGfToken {
  28. var fun gftoken.OptionFunc
  29. if options.CacheModel == consts.CacheModelRedis {
  30. fun = gftoken.WithGRedis()
  31. } else {
  32. fun = gftoken.WithGCache()
  33. }
  34. gT.GfToken = gftoken.NewGfToken(
  35. gftoken.WithCacheKey(options.CacheKey),
  36. gftoken.WithTimeout(options.Timeout),
  37. gftoken.WithMaxRefresh(options.MaxRefresh),
  38. gftoken.WithMultiLogin(options.MultiLogin),
  39. gftoken.WithExcludePaths(options.ExcludePaths),
  40. fun,
  41. )
  42. return IGfToken(&gT)
  43. }