0

在 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 一样优雅的解决方案?

4

1 回答 1

3

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

例如:

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

在这种情况下,只要在处理结束时调用,请求匹配"/private/helloworld"将由 处理handler1,然后由处理。handler2handler1next()

于 2016-12-26T06:03:52.843 回答