如何从 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.body
和 req.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());
我已经为我的 Express.js Node 应用实现了“使用 Facebook 登录”授权方法。由于该应用程序托管在欧盟,因此 Facebook 要求它具有 data deletion request callback URL.
我已经为数据删除请求创建了一个端点,但是只要 I make Facebook call that endpoint req.body
和 req.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());