社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
gin使用中间件一般是在引擎Engine初始化的时候就绑定,也就是说在需要使用中间件才能访问资源的接口之前干这些事情。
也就是说,你现在有3个接口,比如一个用户登录(/api/v1/login), 一个管理员列表(/api/v1/list),一个添加管理员信息(/api/v1/add)。你现在的需求是查询管理员列表与添加管理员接口需要token鉴权才能访问,但是登录是不需要任何限制条件。
那么你就可以在管理员列表和添加信息接口之前加一个中间件,使用router.use(中间件)即可。
可以看下我的
我的鉴权里面是判断tokan是否有效,无效的话我就直接返回400并且return了。我的意思是说鉴权失败了那就return,不需要执行后续的list或者add接口。
但是。使用return压根不起作用。postman模拟器请求的时候发现控制台打印了错误信息如下:
Headers were already written. Wanted to override status code 400 with 200
然后返回结果不仅仅有token鉴权不通过的400,竟然也把查询结果给返回了。
这个结果很尴尬。
中间件里面有错误如果不想继续后续接口的调用不能直接return,而是应该调用c.Abort()方法。
源码如下:
// Abort prevents pending handlers from being called. Note that this will not stop the current handler.
// Let's say you have an authorization middleware that validates that the current request is authorized.
// If the authorization fails (ex: the password does not match), call Abort to ensure the remaining handlers
// for this request are not called.
func (c *Context) Abort() {
c.index = abortIndex
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!