#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())?