Wal*_*cke 0 cron http-authentication firebase google-cloud-functions
由于Firebase(实时数据库)不支持cron-jobs,因此我正在使用cron-job.org来安排http触发器。该功能应该在每天结束时触发一次,因此大约在晚上11:55。问题是我只希望cron-job.org能够触发http端点,而没有其他人(例如,某人一天多次尝试试图触发它)。如何在云功能中实现这一目标?
我已经设置了cronjob,这就是我现在拥有的所有代码:
exports.findAndDeleteSevenDayJobs = functions.https.onRequest((req, res) => {
console.log('req',req);
});
Run Code Online (Sandbox Code Playgroud)
另外,cron-job.org提供了以下功能:
而且我不知道如何使用它。
要在Firebase RDB中创建cron-jobs,请使用cron-jobs.org等第三方服务
创造钥匙
为了确保一切安全,您必须生成一个安全密钥,从现在开始 YourSelfGeneratedButSecureKey
。
您可以在终端中输入以下内容来生成一个: node -e "console.log(require('crypto').randomBytes(20).toString('hex'))"
创建Cron工作
创建一个新的cron-job,它将击中您的云函数端点,并将创建的键作为url查询附加,如下所示:
https://{projectSpecific}.cloudfunctions.net/{nameOfFunction}?key={YourSelfGeneratedButSecureKey}
通过在终端中使用以下命令,将密钥设置到您的环境中:
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
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
472 次 |
最近记录: |