带有 Negroni 的特定于路由的中间件

我有一个使用 httprouter 和 negroni 的网络服务器。用户通过外部 OAuth 登录此系统。我们将令牌保存到表明他们是否登录的加密会话中。我想使用中间件来验证此令牌是否存在,如果不存在,则将用户踢回登录页面。我想从使用身份验证中间件中排除一些路由。negroni README 中有一个使用 gorilla mux 执行此操作的示例,但我无法完全理解使用 httprouter 可扩展地执行此操作。类似于我的服务器设置的内容如下:


router := httprouter.New()

router.GET("/login", Login) // auth not required

router.GET("/", Index)  // auth required


s := 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?请记住,旁边还会有其他几条“公共”路线以及/login许多其他门控路线。


慕莱坞森
浏览 163回答 2
2回答

蝴蝶不菲

如果使用 httprouter,则可以通过调用 router.Lookup 函数来检索参数。这是我所做的:_, params, _ := router.Lookup("GET", req.URL.Path) 其中 router 是 httprouter.Router 的一个实例
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go