Kitura TypeSafeHTTPBasic auth在帖子正文中寻找凭证?

时间:2018-07-26 04:23:07

标签: swift rest kitura

我在Kitura中有一个TypeSafe可编码路线,定义如下:

app.router.post("/games") { (auth: BasicAuth, respondWith: @escaping (Game?, RequestError?) -> ()) in 
    ...
}

但是,当我提出请求时,我会收到Could not decode received JSON: The required key 'id' not found.。好像路由器正在尝试从POST正文而不是从基本auth标头解析auth对象。如果我将路由更改为GET,则可以正常工作,但我对Type Safe Codeable路由不太了解,并且我对POST路由的更改感到困惑。如何使BasicAuth在POST上与GET一样工作?

1 个答案:

答案 0 :(得分:2)

使用Kitura的Codable路由时,POST处理程序希望从消息正文接收Codable输入。您可以选择指定一个或多个TypeSafeMiddleware要求。

如果要执行POST,则需要匹配将the post() function on Router作为输入的Codable和TypeSafeMiddleware:

app.router.post("/games") { (auth: BasicAuth, input: MyInputType, respondWith: @escaping (Game?, RequestError?) -> ()) in 
    ...
}

您的情况是您实际上在匹配this post() function without TypeSafeMiddleware,其中您的身份验证类型(符合Codable)被解释为输入类型。

如果您不希望为此请求将有效负载发布到服务器,那么您可能想要的是一个GET,它与the get() function on Router匹配,后者仅使用TypeSafeMiddleware作为输入:

app.router.get("/games") { (auth: BasicAuth, respondWith: @escaping (Game?, RequestError?) -> ()) in 
    ...
}

请注意,TypeSafeMiddleware是路由处理程序的第一个参数,其后是任何其他输入类型(对于PUT或POST)。