Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 每次创建新用户时触发云函数_Reactjs_Firebase_Firebase Realtime Database_React Redux_Firebase Authentication - Fatal编程技术网

Reactjs 每次创建新用户时触发云函数

Reactjs 每次创建新用户时触发云函数,reactjs,firebase,firebase-realtime-database,react-redux,firebase-authentication,Reactjs,Firebase,Firebase Realtime Database,React Redux,Firebase Authentication,我正在使用react-redux-firebase框架()。我部署了一个在functions.auth.user().oncreate事件上触发的函数。流程如下: 用户登录 用户的文档是在myusers集合中创建的 函数在google添加的默认字段之上触发并向用户文档追加字段 这是有效的 然后,我在user集合上实现了CRUD函数。当我通过在UI中实现的CRUD函数删除用户文档时,它会成功地从firestore中删除。但是,当我与用户重新登录时,它将重新创建用户文档,但仅使用默认的google字

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

  • 用户登录
  • 用户的文档是在my
    users
    集合中创建的
  • 函数在google添加的默认字段之上触发并向用户文档追加字段
  • 这是有效的

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

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

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


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

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

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

    因此,如果您希望每次在firestore中创建用户文档时都触发该函数,它将如下所示:

    exports.updateUser = functions.firestore
        .document('users/{userId}')
        .onCreate((change, context) => {
          // Your logic
        });
    
    或者,一个实时数据库触发器看起来类似,但您可以用数据库替换firestore。所以

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

    以下是有关的文件


    以下是

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

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

    firebase.auth().currentUser.delete()
    .然后(函数(){
    console.log(“已成功删除用户”);
    })
    .catch(函数(错误){
    console.log('删除用户时出错',错误);
    });
    
    如果要从云功能中删除用户,则应使用:

    admin.auth().deleteUser(uid)//是否可以从已删除的文档ID获取uid?
    .然后(函数(){
    console.log(“已成功删除用户”);
    })
    .catch(函数(错误){
    console.log('删除用户时出错',错误);
    });
    
    您想了解如何在向数据库中添加用户数据时触发函数,还是想了解如何从身份验证模块中删除用户?下面提供了这两个问题的答案。请根据您接受的答案编辑此问题的标题,以便将来其他人搜索相同问题时有用。
    exports.updateUser = functions.database.ref('users/{userId}')
        .onCreate((snap, context) => {
          // Your logic
        });