main.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package main
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "net/http"
  5. "standard/token/jwt/token"
  6. "strings"
  7. "time"
  8. )
  9. // JwtMiddleware jwt中间件
  10. func JwtMiddleware() gin.HandlerFunc {
  11. return func(c *gin.Context) {
  12. //从请求头中获取token
  13. tokenStr := c.Request.Header.Get("Authorization")
  14. //用户不存在
  15. if tokenStr == "" {
  16. c.JSON(http.StatusOK, gin.H{"code": 0, "msg": "用户不存在"})
  17. c.Abort() //阻止执行
  18. return
  19. }
  20. //token格式错误
  21. tokenSlice := strings.SplitN(tokenStr, " ", 2)
  22. if len(tokenSlice) != 2 && tokenSlice[0] != "Bearer" {
  23. c.JSON(http.StatusOK, gin.H{"code": 0, "msg": "token格式错误"})
  24. c.Abort() //阻止执行
  25. return
  26. }
  27. //验证token
  28. tokenStruck, ok := token.CheckToken(tokenSlice[1])
  29. if !ok {
  30. c.JSON(http.StatusOK, gin.H{"code": 0, "msg": "token不正确"})
  31. c.Abort() //阻止执行
  32. return
  33. }
  34. //token超时
  35. if time.Now().Unix() > tokenStruck.ExpiresAt {
  36. c.JSON(http.StatusOK, gin.H{"code": 0, "msg": "token过期"})
  37. c.Abort() //阻止执行
  38. return
  39. }
  40. c.Set("username", tokenStruck.UserName)
  41. c.Set("user_id", tokenStruck.UserId)
  42. c.Next()
  43. }
  44. }