1. // JWTAuthMiddleware 基于JWT的认证中间件
    2. // func JWTAuthMiddleware() func(c *gin.Context) {
    3. // return func(c *gin.Context) {
    4. // // 客户端携带Token有三种方式 1.放在请求头 2.放在请求体 3.放在URI
    5. // // 这里假设Token放在Header的Authorization中,并使用Bearer开头
    6. // // 这里的具体实现方式要依据你的实际业务情况决定
    7. // authHeader := c.Request.Header.Get("Authorization")
    8. // if authHeader == "" { // 如果请求头中没有附带token
    9. // c.JSON(http.StatusOK, gin.H{
    10. // "code": 2003,
    11. // "msg": "请求头中auth为空",
    12. // })
    13. // c.Abort()
    14. // return
    15. // }
    16. // // 按空格分割
    17. // parts := strings.SplitN(authHeader, " ", 2)
    18. // if !(len(parts) == 2 && parts[0] == "Bearer") {
    19. // c.JSON(http.StatusOK, gin.H{
    20. // "code": 2004,
    21. // "msg": "请求头中auth格式有误",
    22. // })
    23. // c.Abort()
    24. // return
    25. // }
    26. // // parts[1]是获取到的tokenString,我们使用之前定义好的解析JWT的函数来解析它
    27. // mc, err := myjwt.ParseToken(parts[1])
    28. // if err != nil {
    29. // c.JSON(http.StatusOK, gin.H{
    30. // "code": 2005,
    31. // "msg": "无效的Token",
    32. // })
    33. // c.Abort()
    34. // return
    35. // }
    36. // // 将当前请求的username信息保存到请求的上下文c上
    37. // c.Set("username", mc.Username)
    38. // c.Set("number", mc.Number)
    39. // c.Next() // 后续的处理函数可以用过c.Get("username")来获取当前请求的用户信息
    40. // }
    41. // }