如何从 Facebook 的数据删除 URL 调用中获取 req.body?

How to get req.body from Facebook's data deletion URL call?

我已经为我的 Express.js Node 应用实现了“使用 Facebook 登录”授权方法。由于该应用程序托管在欧盟,因此 Facebook 要求它具有 data deletion request callback URL.

我已经为数据删除请求创建了一个端点,但是只要 I make Facebook call that endpoint req.bodyreq.query 都是空的——如果我理解正确的话,正文应该包含一个signed_request 可用于例如验证来电者。

我的 CORS 设置应该没问题,我已经通过从 Postman 调用它来测试我的端点。端点能够毫无问题地接收带有 JSON 正文的 POST 请求。

那么,我做错了什么 - 为什么 Facebook 似乎在用一个 POST 请求调用我的端点,请求主体是空的?

我的终点:

import express from 'express'; // 4.17.1
const router = express.Router();

router.post('/fb_data_deletion', (req, res, next) => {
    console.log(req.body); // {}
    console.log(req.query); // {}

    if (!req.body || !req.body.signed_request) {
        console.log('Bad request'); // Ends up here whenever Facebook calls this route
        return req.sendStatus(400);
    }

    // verify request, delete user's data + other code here

});

事实证明,Facebook 并未发送使用内容类型 application/json 的 POST 请求,而是 application/x-www-form-urlencoded.

为了获取 Facebook 的 POST 请求的正文,我必须将以下行添加到我的 app.js 正在设置节点服务器的地方:

app.use(express.urlencoded());