Firebase CronJobs - как разрешить http триггеры с одного сайта cronjob - PullRequest
0 голосов
/ 10 октября 2018

Поскольку Firebase (БД в реальном времени) не поддерживает задания cron, я использую cron-job.org для планирования http-триггеров.Эта функция должна срабатывать один раз в конце каждого дня, поэтому около 23:55.Дело в том, что я хотел бы, чтобы только cron-job.org мог запускать конечную точку http, и никто другой (например, кто-то злоумышленник пытался запускать ее много раз в день).Как я могу добиться этого в своей облачной функции?

Я установил cronjob, и это весь код, который у меня сейчас есть:

exports.findAndDeleteSevenDayJobs = functions.https.onRequest((req, res) => {
  console.log('req',req);
});

Кроме того, cron-job.org предлагает это:

enter image description here

И я понятия не имею, как его использовать.

1 Ответ

0 голосов
/ 11 октября 2018

Для создания заданий cron в RDB Firebase используйте сторонний сервис, такой как cron-jobs.org

СОЗДАНИЕ КЛЮЧА

Комучтобы все было безопасно, вы должны сгенерировать безопасный ключ, теперь он называется YourSelfGeneratedButSecureKey.

. Вы можете создать его в своем терминале, набрав: node -e "console.log(require('crypto').randomBytes(20).toString('hex'))"

CREATING CRON JOB

Создайте новое задание cron, которое поразит вашу конечную точку облачной функции, и прикрепите созданный ключ в виде URL-запроса следующим образом:

https://{projectSpecific}.cloudfunctions.net/{nameOfFunction}?key={YourSelfGeneratedButSecureKey}

Установите ключ в свой env, используя следующую команду в своем терминале: firebase functions:config:set cron.key="{YourSelfGeneratedButSecureKey}"

ФУНКЦИЯ ОБЛАКА

Чтобы обеспечить максимальную безопасность, вы можете установитьsecure-compare, набрав npm install --save secure-compare;

Затем в вашей облачной функции:

const secureCompare = require('secure-compare');

exports.{nameOfFunction} = functions.https.onRequest((req, res) => {

  const { key } = req.query;

  if (!secureCompare(key, functions.config().cron.key)) {
    console.log('Key in request and in env do NOT match');
    res.status(403).send('Security key does not match.');
    return null;
  }

  // DO REPETITIVE STUFF SECURELY 

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...