我正在嘗試使用身份驗證中間件來檢查用戶當前是否已連接并在執行路由之前進行會話,但似乎我的中間件并沒有停止執行路由并執行下一個路由,即使我沒有呼叫下一個()。
這是我的代碼:
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 狀態代碼。
謝謝
uj5u.com熱心網友回復:
在你checkUserAuth洗掉
if err := next(c); err != nil {
c.Error(err)
}
next() 首先在您的中間件中觸發。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/414545.html
標籤:
