使用body-parser + expressjs是可以的。但我的问题是:如何在Hapijs中获取原始请求体的缓冲区?
我说的是类似于body-parser npm包中这个函数的buf
参数:verify(req,res, buf, encoding)。
我需要它用于messenger-platform-samples示例中的这个函数:
function verifyRequestSignature(req, res, buf) {
var signature = req.headers["x-hub-signature"];
if (!signature) {
console.error("Couldn't validate the signature.");
} else {
var elements = signature.split('=');
var method = elements[0];
var signatureHash = elements[1];
var expectedHash = crypto.createHmac('sha1', APP_SECRET)
.update(buf)
.digest('hex');
if (signatureHash != expectedHash) {
throw new Error("Couldn't validate the request signature.");
}
}
}
编辑:我需要在我的中间件中使用此代码,使用server.ext()
,像这样:
server.ext({
type: 'onRequest',
method: (request, reply) => {
var signature = request.headers["x-hub-signature"];
if (!signature) {
console.error("Couldn't validate the signature.");
} else {
var elements = signature.split('=');
var method = elements[0];
var signatureHash = elements[1];
var expectedHash = crypto.createHmac('sha1', APP_SECRET)
.update(request.payload)
.digest('hex');
if (signatureHash != expectedHash) {
throw new Error("Couldn't validate the request signature.");
}
return reply.continue();
}
}
});
request.payload
,所以我必须自己解析它吗? - notmeserver.ext()
来定义我的中间件,那么我该如何获取这个缓冲区呢? - notme.ext
中访问原始缓冲区。但是你可以在route-prerequisites
中访问它。阅读:https://hapijs.com/api/16.1.0#route-prerequisites - Nehal J Wani