Session Kitura 的路线?
Session routes in Kitura?
在 Vapor 中,我可以通过以下方式轻松保护登录 session 中的路由:
drop.group(protect) {
secure in
secure.get("secureRoute", handler: )
secure.post("securePostRoute", handler: )
//and so forth
}
并且处理程序照常进行,不检查 sessions,因为它已经由 drop.group(protect)
完成。
然而,在 Kitura 中,似乎如果我想实现同样的事情,我必须这样做:
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()
}
}
我必须手动检查 每个 安全路由中的 session。这最终会变得非常多余。
有没有像 Vapor 一样优雅的解决方案?
如果您有多个路由需要的通用逻辑,您可以设置一个中间件并让它在每个路由之前执行。 Kitura 支持 Node express 风格的路由处理;您可以按顺序注册中间件,中间件将按照注册的相同顺序进行处理(假设它们的挂载路径与请求匹配URL)。
例如:
router.get("/private/*", handler: handler1)
router.get("/private/helloworld", handler: handler2)
在这种情况下,匹配 "/private/helloworld"
的请求将由 handler1
处理,然后由 handler2
处理,只要 handler1
在处理结束。
在 Vapor 中,我可以通过以下方式轻松保护登录 session 中的路由:
drop.group(protect) {
secure in
secure.get("secureRoute", handler: )
secure.post("securePostRoute", handler: )
//and so forth
}
并且处理程序照常进行,不检查 sessions,因为它已经由 drop.group(protect)
完成。
然而,在 Kitura 中,似乎如果我想实现同样的事情,我必须这样做:
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()
}
}
我必须手动检查 每个 安全路由中的 session。这最终会变得非常多余。
有没有像 Vapor 一样优雅的解决方案?
如果您有多个路由需要的通用逻辑,您可以设置一个中间件并让它在每个路由之前执行。 Kitura 支持 Node express 风格的路由处理;您可以按顺序注册中间件,中间件将按照注册的相同顺序进行处理(假设它们的挂载路径与请求匹配URL)。
例如:
router.get("/private/*", handler: handler1)
router.get("/private/helloworld", handler: handler2)
在这种情况下,匹配 "/private/helloworld"
的请求将由 handler1
处理,然后由 handler2
处理,只要 handler1
在处理结束。