<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                中間件提供了一種方便的機制來過濾進入應用程序的 HTTP 請求。例如,`GoHub` 包含一個驗證用戶身份的中間件。 如果用戶未能通過認證,中間件會把用戶重定向到登錄頁面。 反之,用戶如果通過驗證, 中間件將把請求進一步轉發到應用程序中。 當然,除了驗證身份外,還可以編寫其他的中間件來執行各種任務。例如:`CORS` 中間件可以負責為所有的應用返回的 `responses` 添加合適的響應頭。日志中間件可以記錄所有傳入應用的請求。 `GoHub` 自帶了一些中間件,包括身份驗證、限流器 、HTTP請求日志等。所有的這些中間件都位于`app/http/middlewares`目錄。 ## 定義中間件 我們來自己定義一個`JWT`鑒權的中間件 ``` // Package middlewares Gin 中間件 package middlewares import ( "github.com/spf13/cast" "gohub/app/models/user" "gohub/pkg/jwt" "gohub/pkg/response" "net/http" "github.com/gin-gonic/gin" ) // AuthJWT 驗證用戶身份 func AuthJWT() gin.HandlerFunc { return func(c *gin.Context) { // 從標頭 Authorization:Bearer xxxxx 中獲取信息,并驗證 JWT 的準確性 claims, err := jwt.NewJWT().ParserToken(c) // JWT 解析失敗,有錯誤發生 if err != nil { response.ShowError(c, http.StatusUnauthorized, err.Error()) c.Abort() return } // JWT 解析成功,設置用戶信息 userModel := user.Get(cast.ToString(claims.UserID)) if userModel.ID == 0 { response.ShowError(c, http.StatusUnauthorized, "用戶不存在") c.Abort() return } // 將用戶信息存入 gin.context 里,后續 auth 包將從這里拿到當前用戶數據 c.Set("user_id", userModel.GetStringID()) c.Set("user_name", userModel.Name) c.Set("user", userModel) c.Next() } } ``` ***** ### 在路由使用中間件 ``` userRouter.GET("/profile/", middlewares.AuthJWT(), handler.UserProfile) userRouter.POST("/update", middlewares.AuthJWT(), handler.UpdateUserProfile) ``` ***** ### 在路由組使用中間件 ``` // 所有的 v1 版本的路由都將存放到這里 v1 := r.Group("/v1") // 全局限流中間件:每小時限流。這里是所有 API (根據 IP)請求加起來。 v1.Use(middlewares.AuthJWT()) { v1.GET("/profile/", handler.UserProfile) } ``` ## 全局中間件 如果你希望中間件在應用處理每個`HTTP`請求期間運行,只需要在 `bootstrap/route.go`中的`registerGlobalMiddleWare`方法添加這個中間件即可,例如: ``` // 全局中間件 func registerGlobalMiddleWare(router *gin.Engine) { router.Use( // 記錄HTTP日志 middlewares.Logger(), // 全局異常處理 middlewares.Recovery(), // 強制 User Agent 中間件 middlewares.ForceUA(), ) } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看