在Vapor中,我可以通过以下方法轻松地在登录会话中保护路由:
drop.group(protect) {
secure in
secure.get("secureRoute", handler: )
secure.post("securePostRoute", handler: )
//and so forth
}
处理程序照常进行,不检查会话,因为它已经由
drop.group(protect)
完成了。然而,在北村,似乎我想实现同样的目标,我必须这样做:
router.get("/") {
request, response, next in
//Get the current session
sess = request.session
//Check if we have a session and it has a value for email
if let sess = sess, let email = sess["email"].string {
try response.send(fileName: pathToFile).end()
} else {
try response.send(fileName: pathToAnotherFile).end()
}
}
我必须手动检查每个安全路由中的会话。这将是非常多余的。
有没有比蒸汽更优雅的解决方案?
最佳答案
如果您有多个路由所需的公共逻辑,则可以设置一个中间件,并在每个路由之前执行它。Kitura支持Node express风格的路由处理;您可以按顺序注册中间件,并且中间件将按注册顺序进行处理(假设它们的装载路径与请求URL匹配)。
例如:
router.get("/private/*", handler: handler1)
router.get("/private/helloworld", handler: handler2)
在这种情况下,匹配
"/private/helloworld"
的请求将由handler1
处理,然后由handler2
处理,只要handler1
在处理结束时调用next()
。关于swift - 在基图拉的航线?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41326027/