【问题标题】:Firebase One-time FunctionsFirebase 一次性函数
【发布时间】:2020-06-18 16:21:30
【问题描述】:

我确信这些是常见的情况,但在研究了几个小时后,我真的找不到常见的做法是什么。也许在 Firebase 方面有更多经验的人可以为我指明正确的方向。

我有两种特殊情况:

1。运行一次的代码

示例 1: 向 Firestore 中的所有用户添加新数据,这是新功能所必需的
示例 2: 开始将数据复制到现有文档中

我目前在云函数中编写代码,并在 firestore 事件(“隐藏”文档的onUpdate)上运行它,然后如果一切顺利,我会立即删除该函数。

我还增加了此函数的超时和内存,因为这个想法可能会更新数百万个文档。

2。从 firebase 控制台(或命令行)手动触发函数

示例:在应用中授予用户管理员权限(设置自定义声明和 Firestore 数据的功能)。我们没有时间实现后台,因此从 firebase 门户网站/控制台执行此操作是理想的,并指定用户 ID。

我当前的解决方案是使用https function,并从 GCP 门户运行它(在函数的“测试”选项卡上,能够传递 json)。但是该功能可以公开触发,我不太喜欢...

这些场景的常见做法是什么?

【问题讨论】:

  • 在这两种情况下,我都会使用命令行节点脚本。对于第二个示例,如果您有时间并且非技术人员需要能够进行这些更改,您可以使用 Firebase 管理 SDK 构建一个非常简单的管理 UI。
  • 谢谢@KevinRenskers,我会查查的!

标签: firebase google-cloud-firestore google-cloud-functions firebase-admin


【解决方案1】:

对于管理类型的操作,最好只在桌面或您控制的其他服务器上运行它们。 Cloud Functions 不太适合长时间运行的操作,或者必须按需发生一次的事情。

案例 1 确实应该由一个独立的程序或脚本来管理,您可以通过在桌面上运行它来对其进行监控。

案例 2 可以通过多种方式完成,例如构建您自己的管理网站。但是您可能会发现使用 Firestore 触发器将文档的内容镜像到自定义声明最容易。阅读:https://medium.com/firebase-developers/patterns-for-security-with-firebase-supercharged-custom-claims-with-firestore-and-cloud-functions-bb8f46b24e11

【讨论】:

  • 闪电般的快速解答!案例2:这个教程很完美,做得很好,很棒。案例一:明白了,是不是像本地云函数?可能是https://firebase.google.com/docs/functions/local-emulator 之类的东西?凯文提到了Command Line Node Scripts。有没有关于firebase的博客文章?作为建议,也许在 Firestore 文档的“解决方案”下,添加一个带有示例的页面“一次性脚本”。来自 iOS,并且在节点方面不是很有经验,如果有一个快速简单的方法让我开始使用它会很好。谢谢:)
【解决方案2】:

扩展我的评论:如果你想创建一个节点脚本来运行一次性代码,你只需像任何云函数一样编写你的 JS 代码,但只需立即运行它。像这样的东西。

const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();

db.collection('users')
  .where('myField', '==', true)
  .get()
  .then(querySnapshot => {
    querySnapshot.docs.forEach(doc => {
      // update doc
    });
  });

如果您将其保存为 script.js 并使用 node script.js 执行它,您将被指向下载带有凭据的 JSON 文件。按照说明操作,然后您可以再次运行脚本,现在您可以从命令行在 Firestore 上运行自己的代码。

【讨论】:

  • 如此简单,我不知道我在研究中怎么错过了这个。而且我想这没有像 Cloud Functions 那样的时间和内存限制,它非常适合大型 Firestore 数据更改(或者更好的是,在 Google Shell 上执行此操作)。再次感谢:)
  • 是否可以在本地模拟器上运行它?
猜你喜欢
  • 1970-01-01
  • 2020-12-01
  • 2017-12-26
  • 1970-01-01
  • 2020-06-28
  • 2021-06-29
  • 1970-01-01
  • 2022-01-01
  • 2020-12-24
相关资源
最近更新 更多