Kitura的会话路线?

时间:2016-12-26 02:57:04

标签: swift rest session routes kitura

在Vapor中,我可以通过以下方式轻松保护登录会话中的路径:

drop.group(protect) {
    secure in
    secure.get("secureRoute", handler: )
    secure.post("securePostRoute", handler: )
    //and so forth
}

并且处理程序像往常一样继续进行,没有检查会话,因为它已经由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()
    }
}

我必须在每个安全路由中手动检查会话。这最终会非常多余。

有没有像Vapor一样优雅的解决方案?

1 个答案:

答案 0 :(得分:3)

如果您在多个路由中需要通用逻辑,则可以设置中间件并在每个路由之前执行它。 Kitura支持Node express式路由处理;您可以按顺序注册中间件,并且将按照它们注册的顺序处理中间件(假设它们的安装路径与请求URL匹配)。

例如:

router.get("/private/*", handler: handler1)
router.get("/private/helloworld", handler: handler2)

在这种情况下,匹配"/private/helloworld"的请求将由handler1处理,然后由handler2处理,只要handler1在最后调用next()它的处理。