javascript - 从 Shopify Webhook 验证 HMAC(使用 Hapijs)
问题描述
我正在尝试在 webhook 中验证 Shopify 的 HMAC。这是我的控制器的外观:
newOrder: {
payload: {
parse: false
},
handler: function(request, reply) {
const hmac = request.headers['x-shopify-hmac-sha256'];
let generatedHash = crypto
.createHmac('sha256', utils.SHOPIFY_API_SECRET)
.update(JSON.stringify(request.payload))
.digest('base64');
if (generatedHash == hmac) {
console.log("Validated");
} else {
console.log("Not validated");
}
console.log(hmac, generatedHash.toString(), utils.SHOPIFY_API_SECRET)
reply().code(200);
},
auth: false,
notes: 'Shopifys new order webhook',
tags: ['api'],
id: 'newOrder'
}
但hmac
永远不等于generatedHash
。我认为它与 req.rawBody (来自 Express)有关,但我不知道如何从 Hapijs 获得相同的有效负载,或者我遗漏了一些东西。
我正在使用 HapiJs v14.0.0。
解决方案
确保您payload.parse
在路线的配置中设置为 false 并request.raw.req
用于获取原始正文
推荐阅读
- nginx - Ngix 配置不起作用。(阻止文件访问)
- javascript - 手动更改事件未触发
- python - 熊猫从上面的行中获取差异的比率并将值存储在另一列中,具有多索引
- python - 从烧瓶 webapp 获取 URL 并将抓取的项目保存在 SQLite3 数据库中。不确定是否调用了 process_item
- php - do_action 在其位置之前返回值
- python - 为 Functor 正确实现 fmap?
- python - 我正在写一个 Django 博客,错误是
- layout - 全屏设计
- java - 如何在 Java 8 中的 java.util.Date 中获取特定时间
- ruby-on-rails - Rspec stub_const 竞争条件