Firebase的Cloud功能是否可以在用户登录时执行?

时间:2017-09-27 16:30:18

标签: firebase google-cloud-functions

我看到如何在创建用户帐户时执行云功能:

exports.myFunction = functions.auth.user().onCreate(event => { 

但我需要在用户登录时执行我的功能。是否有onLogin触发器?

有1500分的人可以为firebase-cloud-functions创建标记吗?

5 个答案:

答案 0 :(得分:4)

没有登录事件,因为只有客户端才能准确定义登录发生的时间。不同的客户可以以不同的方式定义它。如果您需要在登录时触发某些内容,请确定该点何时在您的应用程序中,然后通过数据库或HTTP函数从客户端触发它。

答案 1 :(得分:2)

这在控制器中起作用:

firebase.auth().onAuthStateChanged(function(user) { // this runs on login
    if (user) { // user is signed in
      console.log("User signed in!");
      $scope.authData = user;
      firebase.database().ref('userLoginEvent').update({'user': user.uid}); // update Firebase database to trigger Cloud Function
    } // end if user is signed in
    else { // User is signed out
      console.log("User signed out.");
    }
  }); // end onAuthStateChanged

这是云功能的触发器:

exports.getWatsonToken = functions.database.ref('userLoginEvent').onUpdate(event => { // authentication trigger when user logs in

我在Firebase数据库中创建了一个名为userLoginEvent的位置。

令人困惑的一点是,在函数控制台中它是/userLoginEvent,但在你的代码中你必须省略斜杠。 enter image description here

答案 2 :(得分:0)

您可以创建自己的分析事件,例如login,并将其用作云功能的触发器。

然后在您的应用中,当用户成功通过身份验证时,您将使用Firebase Analytics发送具有您定义的名称的事件,例如login

exports.sendCouponOnPurchase = functions.analytics.event('login').onLog((event) => {
  const user = event.user;
  const uid = user.userId; // The user ID set via the setUserId API.


});

答案 3 :(得分:0)

您可以在登录时触发https onCall Firebase云功能

ex:这是您的登录按钮触发函数,在对用户进行身份验证后会调用https onCall函数。

_login() {
            firebase
                .auth()
                .signInWithEmailAndPassword(this.state.email, this.state.password)
                .then(function (user) {
                    var addMessage = firebase.functions().httpsCallable('myCloudFunctionName');
                    addMessage("whatever variable I want to pass")
                    .catch(error => {
                        console.log("I triggered because of an error in addMessage firebase function " + error)
                    )}
                }).catch(error => {
                    console.log(error);
                });
        }

答案 4 :(得分:0)

如果为项目启用了Identity Platform,则还有另一种方法可以在Google Cloud中执行此操作。然后,您可以按照以下指南进行操作:

https://cloud.google.com/functions/docs/calling/logging

并为以下任何Firebase身份验证事件触发云功能:

https://cloud.google.com/identity-platform/docs/activity-logging?authuser=1&_ga=2.226566175.-360767162.1535709791#logged_operations

我刚才注意到的唯一问题是,为登录事件生成的日志不包含firebase应用程序ID或任何可确定用户登录哪个客户端的客户端,这确实很烦人,因为这是我们需要的主要原因为此!