jwt.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package middleware
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/go-nunu/nunu-layout-advanced/pkg/helper/resp"
  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("请求未携带token,无权限访问", zap.Any("data", map[string]interface{}{
  15. "url": ctx.Request.URL,
  16. "params": ctx.Params,
  17. }))
  18. resp.HandleError(ctx, http.StatusUnauthorized, 1, "no token", 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. }))
  28. resp.HandleError(ctx, http.StatusUnauthorized, 1, err.Error(), 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. userInfo := ctx.MustGet("claims").(*jwt.MyCustomClaims)
  62. logger.NewContext(ctx, zap.String("UserId", userInfo.UserId))
  63. }