我在我的users集合上有一个onUpdate触发器,用于更新相应的用户配置文件。
exports.onUpdateUser = functions.firestore.document('/users/{uid}')
.onUpdate((change, context) => {
const { uid } = context.params;
const { email, displayName, photoURL } = change.after.data();
return admin.auth().updateUser(uid, {
email,
displayName,
photoURL
});
});
如果提供的电子邮件已经存在,则触发器可能会抛出错误。在这种情况下,我想放弃对用户文档所做的更改,然后让客户端知道该错误。
使用上面的实现,文档将被成功更新,触发器将在客户端不知道的情况下无声地抛出错误。
我可以改变这种行为吗?或者我唯一的选择是实现一个单独的HTTP云函数来处理用户更新?
1条答案
按热度按时间pbgvytdp1#
在出现错误的情况下,您可以使用Cloud Function写入
/users/{uid}
节点下的特定子节点,并让客户端前端侦听该子节点。云函数代码如下所示:
在前端监听
/users/{uid}/updateError
节点,如果写入新值,则显示警报/消息。确切的侦听器语法取决于您的前端技术(Web应用程序?安卓应用?iOS app?)。请注意,在Cloud Function中,您利用了
admin.auth().updateUser()
方法的错误管理以及它返回特定代码的事实。参见https://firebase.google.com/docs/auth/admin/errors
和https://firebase.google.com/docs/auth/admin/manage-users#update_a_user,其中指出:
如果提供的uid与现有用户不对应,提供的电子邮件或电话号码已被现有用户使用,或者由于任何其他原因无法更新用户,则上述方法失败并出错。