使用Negroni 的特定於路由的中間件:自訂身份驗證
在使用httprouter 和Negroni 的Web 應用程式中,可能需要應用中間件特定路線,同時排除其他路線。例如,身份驗證中間件可用於驗證使用者登入狀態,但對於某些頁面可能沒有必要。
Negroni 提供了一種通用的方法來處理特定於路由的中間件。此解決方案涉及為需要唯一中間件的每個路由建立單獨的 Negroni 實例。
在提供的範例程式碼中, /login 路由不應需要身份驗證,而 / 路由則需要。以下是實現此目的的方法:
<code class="go">router := httprouter.New() router.Handler("GET", "/login", negroni.New(negroni.HandlerFunc(loginHandler))) router.Handler("GET", "/", negroni.New(authenticator.Get(), negroni.HandlerFunc(indexHandler))) server := negroni.Classic() server.UseHandler(router) server.Use(sessions.Sessions("example-web-dev", cookiestore.New([]byte("some secret")))) server.Run(":3000")</code>
透過為每個路由建立單獨的 Negroni 實例,開發人員可以將不同的中間件鏈應用到應用程式的不同部分。在這種情況下, /login 路由將僅使用 negroni.Classic() 提供的中間件和新增至伺服器的會話中間件,而 / 路由將另外使用在authenticator.Get()中建立的中間件。
loginHandler 和indexHandler 都必須遵循特定的方法簽名:
<code class="go">func(http.ResponseWriter, *http.Request, http.HandlerFunc)</code>
這種方法可隨著應用程式的增長提供可擴展性,並允許輕鬆管理特定於路由的中間件需求。
以上是如何使用 Negroni 實作特定於路由的中間件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!