【踩坑】gin框架middleware中间件如何中途跳出

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框架middleware中间件如何中途跳出_第1张图片

解决方法

在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() // 继续
}

效果图如下
【踩坑】gin框架middleware中间件如何中途跳出_第2张图片

你可能感兴趣的:(踩坑系列,gin,中间件)