有没有办法在用户节点更新时触发Firebase功能?

时间:2017-08-24 22:41:22

标签: node.js firebase firebase-realtime-database firebase-authentication google-cloud-functions

我有两个包含用户关联电子邮件的节点。每当用户重置其身份验证电子邮件时,它都会在Firebase身份验证用户节点中更新,并通过扇出技术在我的数据库中更新两个节点。每次用户更新其身份验证电子邮件时,都会向他们发送电子邮件地址更改通知,以便他们还原电子邮件地址更改。

我遇到的问题是,如果用户恢复这些更改,则正确的电子邮件地址不再反映在数据库中,并且处于不一致状态。我的解决方案是每当用户更改其身份验证电子邮件时,都会通过云功能自动更新这些节点。

这可能吗?如果是这样,我将用它来实现它?如果没有,是否还有其他人知道的解决方法是保持我的数据库处于一致状态以进行身份​​验证电子邮件更改?

1 个答案:

答案 0 :(得分:2)

经过几个小时的调查后,我发现通过Firebase Admin SDK可以实现这一点。有关详细信息,请参阅https://firebase.google.com/docs/auth/admin/manage-users

基本上,您创建了一个Cloud Function,它使用admin SDK重置电子邮件,而不会向用户发送令人讨厌的通知,并且成功时使用服务器端扇出更新数据库。

例如:

var delay;
chrome.storage.local.get('updateDelayValueTo', function(result){
    delay = result.updateDelayValueTo; //I am getting this correctly
    console.log("delay is: " + delay); //10000
});

function runMyCalculation() {
    var delayMilliSeconds = Math.floor((Math.random() * delay) + 1);
    // Run other code/functions, which depends on "delayMilliSeconds"
    functionOne(delayMilliSeconds);
}


functionOne(delayMilliSeconds) {
    //use delayMilliSeconds here 
    if(functionTwo()){
        setTimeout(functionOne,delayMilliSeconds);
        console.log("delay in here is: " + delayMilliSeconds);
    }
}

functionTwo() {
    //and here..
    while(ButtonIsClicked){ 
        console.log("delay in here is: " + delayMilliSeconds);
        ButtonIsClicked logic...
    }
}


console.log
delay down here is: 260
09:36:22.812 content_script.js:83 delay down here is: 260
09:36:22.813 content_script.js:15 delay is: 1000
09:36:23.074 content_script.js:79 delay down here is: undefined
09:36:23.087 content_script.js:83 delay down here is: undefined
09:36:23.089 content_script.js:79 delay down here is: undefined
09:36:23.089 content_script.js:83 delay down here is: undefined

此技术可用于在之后必须执行某项任务的情况下执行用户信息更改,因为Firebase尚未具有在用户的配置文件数据发生更改时运行的云功能触发器,如Doug Stevenson在评价。