亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 93 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號