javascript - Hapijs 在身份验证之前验证参数

标签 javascript node.js validation hapi.js

我对 Hapi 如何处理验证感到有点困惑,根据请求生命周期 ( http://hapijs.com/api#request-lifecycle ),参数/查询的验证仅在身份验证完成后发生。

这样做有意义吗?例如,我正在开发一个公共(public) API,但如果请求参数无效,我不想执行所有身份验证逻辑。

通过以下验证说出请求:

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

当请求由于 name 未发送而无效时,为什么 API 还要经历验证用户身份的麻烦?

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

最佳答案

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

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

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

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

  3. 一旦建立了身份验证方法,对请求进行身份验证的“工作量”是相同的,但请求之间的验证可能会有很大差异。一条路线可能有许多需要验证的参数。因此,如果您必须平均失败请求的成本,则身份验证可能比许多请求更便宜。 (请参阅 JWT 身份验证)

关于javascript - Hapijs 在身份验证之前验证参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33558739/

相关文章:

javascript - 条件事件监听器

javascript - JavaScript ES6 Promise 是否与 Promise/A+ 完全相同?

javascript - 类变量在 JavaScript 中返回 undefined

javascript - 使用 NodeJS 的图像像素数组追踪边界

javascript - 小数、逗号和客户端验证问题

javascript - 从对象数据创建数组

javascript - PM2 是要在开发过程中使用吗?

node.js - CORS 安全 : Set Access-Control-Allow-Origin to Origin on Request Header

Python - 语法错误 'Exception'

如果某些复选框被选中,jquery 验证表单输入