Как получить запрос.body из URL-адреса удаления данных Facebook?

#node.js #facebook #express

#node.js #Facebook #экспресс

Вопрос:

Я реализовал метод авторизации «вход с помощью Facebook» для моего Express.js Приложение узла. Поскольку приложение размещено в ЕС, Facebook требует, чтобы у него был URL-адрес обратного вызова запроса на удаление данных.

Я создал конечную точку для запроса на удаление данных, но всякий раз, когда я вызываю Facebook, эта конечная точка и req.body и req.query пуста — если я правильно понял, тело должно содержать a signed_request , которое можно использовать, например, для проверки вызывающего абонента.

Мои настройки CORS должны быть в порядке, и я протестировал свою конечную точку, вызвав ее из Postman. Конечная точка может получать POST-запрос с телом JSON без каких-либо проблем.

Итак, что я делаю не так — почему кажется, что 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

});
  

Комментарии:

1. Мне также нужно сделать то же самое, чтобы мое приложение заработало. Не могли бы вы, пожалуйста, показать весь код?

2. @SatyakiDas Извините, но у меня больше нет доступа к проекту, к которому относится этот вопрос. Практически весь необходимый вам код доступен онлайн в документации разработчика Facebook, поэтому на вашем месте я бы проверил там.

Ответ №1:

Оказывается, Facebook не отправляет запрос POST, который использует Content-Type application/json , но application/x-www-form-urlencoded .

Чтобы получить тело запроса POST от Facebook, мне пришлось добавить следующую строку в свой app.js где настраивается сервер узла:

 app.use(express.urlencoded());
  

Комментарии:

1. повлияет ли это на app.use(express.JSON())?