gin_jwt.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package jws
  2. import (
  3. "git.aionnect.com/aionnect/go-common/utils"
  4. "github.com/gin-gonic/gin"
  5. "net/http"
  6. )
  7. // JWT中间件,检查token,校验不通过报错
  8. func NeedLogin() gin.HandlerFunc {
  9. return func(ctxt *gin.Context) {
  10. token := GetToken(ctxt)
  11. if token == "" {
  12. res := utils.E(http.StatusUnauthorized, "无权限访问", nil)
  13. res.Head.HttpStatus = http.StatusUnauthorized
  14. panic(res)
  15. return
  16. }
  17. j := NewJWT()
  18. // parseToken 解析token包含的信息
  19. claims, err := j.ParseToken(token)
  20. if err != nil {
  21. res := utils.E(http.StatusUnauthorized, err.Error(), nil)
  22. res.Head.HttpStatus = http.StatusUnauthorized
  23. panic(res)
  24. return
  25. }
  26. claims.Token = token
  27. // 继续交由下一个路由处理,并将解析出的信息传递下去
  28. ctxt.Set(Claims, claims)
  29. ctxt.Next()
  30. }
  31. }
  32. // JWT中间件,仅通过token获取载荷信息,校验不通过也不报错
  33. func GetClaims() gin.HandlerFunc {
  34. return func(ctxt *gin.Context) {
  35. token := GetToken(ctxt)
  36. if token != "" {
  37. j := NewJWT()
  38. // parseToken 解析token包含的信息
  39. claims, err := j.ParseToken(token)
  40. if err == nil {
  41. claims.Token = token
  42. // 继续交由下一个路由处理,并将解析出的信息传递下去
  43. ctxt.Set(Claims, claims)
  44. } else {
  45. claims = &TokenClaims{Token: token}
  46. }
  47. }
  48. ctxt.Next()
  49. }
  50. }