使用 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中文网其他相关文章!