我看到如何在创建用户帐户时执行云功能:
exports.myFunction = functions.auth.user().onCreate(event => {
但我需要在用户登录时执行我的功能。是否有onLogin
触发器?
有1500分的人可以为firebase-cloud-functions
创建标记吗?
答案 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
的位置。
答案 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身份验证事件触发云功能:
我刚才注意到的唯一问题是,为登录事件生成的日志不包含firebase应用程序ID或任何可确定用户登录哪个客户端的客户端,这确实很烦人,因为这是我们需要的主要原因为此!