(一)增加JWT中间件

首先在router下新建middleware文件夹,新建jwt.go文件,声明:

生成token的方法为:

解析token的方法为:

中间件的方法为:

func JwtToken()gin.HandlerFunc {

return func(c *gin.Context) {

var codeint

      tokenHeader := c.Request.Header.Get("Authorization")

if tokenHeader =="" {

code =util.ErrorTokenNotExist

        c.JSON(http.StatusOK, gin.H{

"code": code,

            "msg":util.GetErrMsg(code),

        })

c.Abort()

return

      }

checkToken :=strings.Split(tokenHeader, " ")

if len(checkToken) !=2 || checkToken[0] !="Bearer" {

code =util.ErrorTokenTypeWrong

        c.JSON(http.StatusOK, gin.H{

"code": code,

            "msg":util.GetErrMsg(code),

        })

c.Abort()

return

      }

j :=NewJWT()

claims, err := j.ParserToken(checkToken[1])

if err !=util.Success {

c.JSON(http.StatusOK, gin.H{

"code": err,

            "msg":util.GetErrMsg(err),

        })

c.Abort()

return

      }

c.Set("username", claims)

c.Next()

}

}

类似于前端的请求拦截,将得到数据拦截下做处理,写完之后可以在router文件里应用:


需要token的接口使用auth.Use(),不需要的之间写就行了

同时写一下登录接口获取token,在controller里新建login.go,内容如下:



写完之后,拿出postman测一下:


没有token如下图:

加上token 如下图:


注:项目的原作者是:https://space.bilibili.com/402177130,有开源代码,也有视频,老厉害了,有兴趣的可以自己去学习,我这个先跟着做,然后再做改进。