web – 使用Negroni的路由特定中间件

web – 使用Negroni的路由特定中间件,第1张

概述我有一个使用httprouter和negroni的Web服务器.用户通过外部OAuth登录此系统.我们将令牌保存到加密会话中,该会话指示他们是否已登录.我想使用中间件来验证此令牌是否存在,然后将用户踢回登录页面(如果不存在).我想从使用身份验证中间件中排除一些路由.在negroni README中有一个使用gorilla mux执行此 *** 作的示例,但我不能完全理解使用httprouter进行这种可扩 我有一个使用httprouter和negroni的Web服务器.用户通过外部OAuth登录此系统.我们将令牌保存到加密会话中,该会话指示他们是否已登录.我想使用中间件来验证此令牌是否存在,然后将用户踢回登录页面(如果不存在).我想从使用身份验证中间件中排除一些路由.在negroni README中有一个使用gorilla mux执行此 *** 作的示例,但我不能完全理解使用httprouter进行这种可扩展性.与我的服务器设置类似的东西如下:

router := httprouter.New()router.GET("/login",Login) // auth not requiredrouter.GET("/",Index)  // auth requireds := negroni.Classic()s.Use(sessions.Sessions("example-web-dev",cookiestore.New([]byte("some garbage"))))s.Use(authenticator.Get())s.UseHandler(router)

其中/ login是一条路线,我不想通过中间件和/来要求授权. authenticator.Get()是我的身份验证处理程序函数,其中包含我认为与问题无关的内容.

如何将authenticator.Get()应用于/而不是/ login?请记住,在登录和许多其他门控路线旁边还会有其他几条“公共”路线.

一些链接:

> https://github.com/codegangsta/negroni
> https://github.com/codegangsta/negroni/issues/25
> http://godoc.org/github.com/codegangsta/negroni
> http://godoc.org/github.com/julienschmidt/httprouter

解决方法 我最终能够围绕这个过程包围我的大脑.解决方案是为每条路线创建新的negroni.Negroni实例.在上面的情况:

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")

loginHandler和indexHandler都需要具有此方法签名:

func(http.ResponseWriter,*http.Request,http.HandlerFunc)

在给定的示例中,所有路由都将使用negroni.Classic()提供的中间件和添加到服务器的会话中间件,但只使用我将在authenticator.Get()中创建的中间件.

总结

以上是内存溢出为你收集整理的web – 使用Negroni的路由特定中间件全部内容,希望文章能够帮你解决web – 使用Negroni的路由特定中间件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1061107.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存