我正在使用react-redux-firebase
框架(http://react-redux-firebase.com/docs/auth.html)。我部署了一个在functions.auth.user().oncreate
事件上触发的功能。流程如下:
users
集合中创建了用于用户的文档这正在工作。
然后,我在user
集合上实现了CRUD函数。当我通过用户界面中已实现的CRUD功能删除用户文档时,它会成功从Firestore中删除。但是,当我重新与用户重新登录时,它将重新创建用户文档,但是仅使用默认的google字段,它不会再次重新触发该功能。
Google似乎记得谁曾经登录过,.onCreate
仅在新登录时触发。
要使功能再次触发,我必须进入Firebase仪表板并从身份验证表中删除用户,然后重新登录。
如何确保.onCreate
会在users
集合上触发,而不是在Firebase身份验证上触发?
答案 0 :(得分:1)
onCreate
在身份验证触发器的上下文中应有的表现。它仅在创建新用户时触发。当您使用同一用户重新登录时,您不会创建新用户,因此不会触发该功能。您只删除数据库中的用户,而不删除Firebase身份验证中的用户。
如果要基于在集合中创建的用户文档触发功能,则需要编写数据库功能。根据您存储用户数据的位置,这将需要是实时数据库或Firestore触发器。
因此,如果您希望函数在每次在Firestore中创建用户文档时都触发,则它看起来像这样:
exports.updateUser = functions.firestore
.document('users/{userId}')
.onCreate((change, context) => {
// Your logic
});
或者,实时数据库触发器看起来类似,但是您将 firestore 替换为 database 。所以...
exports.updateUser = functions.database.ref('users/{userId}')
.onCreate((snap, context) => {
// Your logic
});
您不仅限于在创建时触发,还可以在更新,写入和删除时触发。
这里是Firestore Triggers上的相关文档
上的文档答案 1 :(得分:1)
根据您的描述,您并不会删除用户本身,而只是删除存储在Cloud Firestore中的用户数据。正确删除用户后,它将触发您设置的所有onDelete
authentication functions。
要使用客户端代码删除用户,您需要使用:
firebase.auth().currentUser.delete()
.then(function() {
console.log('Successfully deleted user');
})
.catch(function(error) {
console.log('Error deleting user:', error);
});
如果要从Cloud Functions中删除用户,请改用:
admin.auth().deleteUser(uid) // maybe get uid from the deleted document ID?
.then(function() {
console.log('Successfully deleted user');
})
.catch(function(error) {
console.log('Error deleting user:', error);
});