Firebase 的 Cloud Functions 可以在用户登录时执行吗?

问题描述 投票:0回答:5

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

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

但是我需要在用户登录时执行我的函数。是否有

onLogin
触发器?

firebase google-cloud-functions
5个回答
13
投票

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


9
投票

这在控制器中有效:

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
,但在代码中你必须省略斜杠。


3
投票

您可以创建自己的分析事件,例如

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.


});

1
投票

您可以在登录时触发 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);
                });
        }

1
投票

如果您为项目启用 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 或任何用于确定用户登录哪个客户端的内容,这确实很烦人,因为这是我们需要做的主要原因这个!

© www.soinside.com 2019 - 2024. All rights reserved.