jwt.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package middleware
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/go-nunu/nunu-layout-advanced/api/v1"
  5. "github.com/go-nunu/nunu-layout-advanced/pkg/jwt"
  6. "github.com/go-nunu/nunu-layout-advanced/pkg/log"
  7. "go.uber.org/zap"
  8. "net/http"
  9. )
  10. func StrictAuth(j *jwt.JWT, logger *log.Logger) gin.HandlerFunc {
  11. return func(ctx *gin.Context) {
  12. tokenString := ctx.Request.Header.Get("Authorization")
  13. if tokenString == "" {
  14. logger.WithContext(ctx).Warn("No token", zap.Any("data", map[string]interface{}{
  15. "url": ctx.Request.URL,
  16. "params": ctx.Params,
  17. }))
  18. v1.HandleError(ctx, http.StatusUnauthorized, v1.ErrUnauthorized, nil)
  19. ctx.Abort()
  20. return
  21. }
  22. claims, err := j.ParseToken(tokenString)
  23. if err != nil {
  24. logger.WithContext(ctx).Error("token error", zap.Any("data", map[string]interface{}{
  25. "url": ctx.Request.URL,
  26. "params": ctx.Params,
  27. }), zap.Error(err))
  28. v1.HandleError(ctx, http.StatusUnauthorized, v1.ErrUnauthorized, nil)
  29. ctx.Abort()
  30. return
  31. }
  32. ctx.Set("claims", claims)
  33. recoveryLoggerFunc(ctx, logger)
  34. ctx.Next()
  35. }
  36. }
  37. func NoStrictAuth(j *jwt.JWT, logger *log.Logger) gin.HandlerFunc {
  38. return func(ctx *gin.Context) {
  39. tokenString := ctx.Request.Header.Get("Authorization")
  40. if tokenString == "" {
  41. tokenString, _ = ctx.Cookie("accessToken")
  42. }
  43. if tokenString == "" {
  44. tokenString = ctx.Query("accessToken")
  45. }
  46. if tokenString == "" {
  47. ctx.Next()
  48. return
  49. }
  50. claims, err := j.ParseToken(tokenString)
  51. if err != nil {
  52. ctx.Next()
  53. return
  54. }
  55. ctx.Set("claims", claims)
  56. recoveryLoggerFunc(ctx, logger)
  57. ctx.Next()
  58. }
  59. }
  60. func recoveryLoggerFunc(ctx *gin.Context, logger *log.Logger) {
  61. if userInfo, ok := ctx.MustGet("claims").(*jwt.MyCustomClaims); ok {
  62. logger.WithValue(ctx, zap.String("UserId", userInfo.UserId))
  63. }
  64. }