我了解如何在创建用户帐户时执行云功能:
exports.myFunction = functions.auth.user().onCreate(event => {
但是我需要在用户登录时执行我的函数。是否有
onLogin
触发器?
没有登录事件,因为只有客户端才能准确定义登录发生的时间。不同的客户可能会以不同的方式定义这一点。如果您需要在登录时触发某些内容,请弄清楚该点何时位于您的应用程序中,然后通过数据库或 HTTP 函数从客户端触发它。
这在控制器中有效:
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
,但在代码中你必须省略斜杠。
您可以创建自己的分析事件,例如
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.
});
您可以在登录时触发 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);
});
}
如果您为项目启用 Identity Platform,还可以通过另一种方法在 Google Cloud 内执行此操作。然后您可以按照本指南操作:
https://cloud.google.com/functions/docs/calling/logging
并为任何这些 Firebase 身份验证事件触发云函数:
我刚刚注意到的唯一问题是,为登录事件生成的日志不包含 firebase 应用程序 ID 或任何用于确定用户登录哪个客户端的内容,这确实很烦人,因为这是我们需要做的主要原因这个!