【问题标题】:Trigger a cloud function every time I create a new user每次创建新用户时触发云功能
【发布时间】:2020-03-28 20:33:23
【问题描述】:

我正在使用react-redux-firebase 框架(http://react-redux-firebase.com/docs/auth.html)。我部署了一个在functions.auth.user().oncreate 事件上触发的函数。流程如下:

  1. 用户登录
  2. 用户的文档是在我的users 集合中创建的
  3. 函数在 google 添加的默认字段之上触发并将字段附加到用户文档

这是有效的。

然后我在 user 集合上实现了 CRUD 函数。当我通过我在 UI 中实现的 CRUD 功能删除用户文档时,它成功地从 Firestore 中删除。但是,当我重新使用用户重新登录时,它会重新创建用户文档,但仅使用默认的 google 字段,它不会再次重新触发该功能。

Google 似乎记得谁以前登录过,.onCreate 只会在新登录时触发。

要让函数再次触发,我必须进入 Firebase 仪表板并从身份验证表中删除用户,然后重新登录。

如何确保 .onCreate 将在 users 集合上触发,而不是在 firebase 身份验证上触发?

【问题讨论】:

  • 您想学习如何在将用户数据添加到数据库时触发函数,还是想学习如何从身份验证模块中删除用户?下面提供了这两个问题的答案。请根据您接受的答案编辑此问题的标题,以便对以后搜索相同问题的其他人有用。

标签: reactjs firebase firebase-realtime-database react-redux firebase-authentication


【解决方案1】:

根据您的描述,您并没有删除用户本身,只是删除了存储在 Cloud Firestore 中的用户数据。当您正确删除用户时,它应该会触发您设置的任何 onDelete authentication functions

要使用客户端代码删除用户,您需要使用:

firebase.auth().currentUser.delete()
  .then(function() {
    console.log('Successfully deleted user');
  })
  .catch(function(error) {
    console.log('Error deleting user:', error);
  });

如果您想从 Cloud Functions 中删除用户,您可以使用:

admin.auth().deleteUser(uid) // maybe get uid from the deleted document ID?
  .then(function() {
    console.log('Successfully deleted user');
  })
  .catch(function(error) {
    console.log('Error deleting user:', error);
  });

【讨论】:

    【解决方案2】:

    onCreate 在身份验证触发器的上下文中表现正常。它仅在您创建新用户时触发。当您使用同一用户重新登录时,您不会创建新用户,因此不会触发该功能。您只是删除数据库中的用户,而不是 firebase 身份验证中的用户。

    如果您想根据在集合中创建的用户文档触发函数,那么您需要编写一个数据库函数。这需要是实时数据库或 Firestore 触发器,具体取决于您存储用户数据的位置。

    因此,如果您希望每次在 firestore 中创建用户文档时触发该函数,它看起来像这样:

    exports.updateUser = functions.firestore
        .document('users/{userId}')
        .onCreate((change, context) => {
          // Your logic
        });
    

    或者,实时数据库触发器看起来相似,但您将 firestore 替换为 database。所以...

    exports.updateUser = functions.database.ref('users/{userId}')
        .onCreate((snap, context) => {
          // Your logic
        });
    

    您不仅可以在创建时触发,还可以在更新、写入和删除时触发。

    这是Firestore Triggers上的相关文档

    这是Real time DB Triggers上的文档

    【讨论】:

      猜你喜欢
      • 2018-06-04
      • 2019-09-09
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 2020-03-23
      • 2020-11-21
      • 2020-06-03
      • 2019-04-14
      相关资源
      最近更新 更多