(一)增加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,有开源代码,也有视频,老厉害了,有兴趣的可以自己去学习,我这个先跟着做,然后再做改进。