Hapijs在验证之前验证了params

时间:2015-11-06 03:01:15

标签: javascript node.js validation hapijs

我对Hapi处理验证的方式感到有些困惑,根据请求生命周期(http://hapijs.com/api#request-lifecycle),params / queries的验证只在验证完成后才会发生。

这样做有意义吗?例如,我正在使用公共API,但如果请求参数无效,我不想通过所有身份验证逻辑。

使用以下验证说出请求:

validate: { 
    name: Joi.string().required()
}

为什么当请求因name未被发送而无效时,API会遇到验证用户身份的麻烦?

或者这只是误解了请求生命周期?

1 个答案:

答案 0 :(得分:3)

验证失败时,hapi会返回有关原因验证失败的信息。在您的示例中,路由需要一个名为name的参数。出于安全原因,您可能不希望告知未经身份验证的用户此路由需要此参数。这给了很多信息吗?

就我个人而言,我认为首先进行身份验证有几个原因:

  1. 更重要的是,告诉用户他们无权访问端点,或者他们的请求无效?我认为授权更重要。

  2. 出于安全原因,请勿披露超出绝对必要的信息。

  3. 建立您的身份验证方法后,"工作量"验证请求是相同的,但验证可以在请求之间变化很大。一条路线可能有许多需要验证的参数。因此,如果您不得不平均失败请求的成本,那么身份验证可能会比许多请求更便宜。 (参见JWT认证)