我正在尝试使用身份验证中间件来检查用户当前是否已连接并且在执行路由之前是否有会话,但似乎我的中间件并没有停止路由的执行并执行下一个路由,即使我没有调用下一个()。这是我的代码: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() 首先在您的中间件中触发。
- 1 回答
- 0 关注
- 70 浏览
添加回答
举报
0/150
提交
取消