gin框架middleware中间件如何中途跳出
背景
我在是使用gin web框架的时候需要自定义鉴权方式,那当然就要用到middleware这个方式了,代码如下所示,需要判断uid和token是否合法,不合法直接返回401状态,不继续往下执行
// 设置middleware
e := gin.New()
e.Use(gin.Recovery())
e.Use(utils.UserAuth)
e.GET("/", func(c *gin.Context) {
c.JSON(
http.StatusOK,
gin.H{
"code": http.StatusOK,
"error": "Welcome server 01",
},
)
})
// UserAuth 用户鉴权
func UserAuth(c *gin.Context) {
if GetUidFromCookie(c) == 0 {
c.JSON(http.StatusUnauthorized, gin.H{"code": 401})
}
}
问题
不生效,发现响应状态码虽然设置对了,但是这响应体不对啊,怎么不跳出啊
解决方法
在gin的文档上找了一圈,也没看到相关的信息,还是从stackoverflow找了几篇,才发现需要额外加点代码,正确代码如下
// UserAuth 用户鉴权
func UserAuth(c *gin.Context) {
if GetUidFromCookie(c) == 0 {
c.JSON(http.StatusUnauthorized, gin.H{"code": 401})
c.Abort() // 跳出
return
}
c.Next() // 继续
}
效果图如下