为了账号安全,请及时绑定邮箱和手机立即绑定

Golang Echo - 中间件在不返回下一个时仍在执行下一个路由

Golang Echo - 中间件在不返回下一个时仍在执行下一个路由

Go
慕码人2483693 2022-10-24 16:09:48
我正在尝试使用身份验证中间件来检查用户当前是否已连接并且在执行路由之前是否有会话,但似乎我的中间件并没有停止路由的执行并执行下一个路由,即使我没有调用下一个()。这是我的代码:func checkUserAuth(next echo.HandlerFunc) echo.HandlerFunc {    return func(c echo.Context) error {        if err := next(c); err != nil {            c.Error(err)        }                currSess, _ := session.Get("session", c)                if userId, ok := currSess.Values["user_id"].(string); ok {            fmt.Println("User is currently connected with id", userId);            return next(c)                    }         // Even if middleware reaches here, it still execute the next route, why?        return echo.ErrUnauthorized    }}func main() {    e := echo.New()    e.Use(checkUserAuth)    e.Use(session.Middleware(store))    e.GET("/", func(c echo.Context) error {        sess, _ := session.Get("session", c)                fmt.Println("got session" , sess.Values["user_id"], "id", sess.ID)        return c.String(http.StatusOK, "Hello")    })   e.GET("/session", func(c echo.Context) error {        sess, _ := session.Get("session", c)        //test        sess.Values["user_id"] = rand.Intn(50000)            sess.Save(c.Request(), c.Response())        return c.String(http.StatusOK, "session saved")    })当我向路由发送 GET 请求时/,中间件会正确执行并到达return echo.ErrUnauthorized语句,但随后/仍然会执行,而且我没有得到任何 401 状态代码。
查看完整描述

1 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

在你checkUserAuth删除


if err := next(c); err != nil {

    c.Error(err)

}

next() 首先在您的中间件中触发。


查看完整回答
反对 回复 2022-10-24
  • 1 回答
  • 0 关注
  • 70 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信