首页 > 解决方案 > 如何创建新用户并将多个用户属性作为事务添加到 Firestore?

问题描述

我正在尝试使用 firebase.auth.onCreate(); 创建一个新用户;我想创建一个具有多个额外属性(即性别、年龄)的用户。我不知道如何将其作为事务完成,或者如何将额外的属性传递到此 onCreate 中,因此云函数只需将额外的属性添加到 firestore 中。

我正在使用电子邮件、密码、显示名称和默认 profileImage 创建新用户。我可以使用 onCreate 云函数将 displayName、email 和 profileImage 添加到 Firestore。出现的问题是,如果在 auth 中创建用户返回的承诺中添加额外的字段,那么如果创建用户成功,但在数据库中添加有关用户的额外基本信息失败,那么我半生不熟用户。如果 firestore.firestore().collection()...set() 调用失败,我不想完全删除用户(这是一个 hacky 解决方案)。

这样,如果创建用户成功但将用户添加到 Firestore 失败,如果我使用事务,整个用户注册将失败。如果我可以传递额外的属性,那么至少云功能由于客户端错误而失败的可能性基本上是没有的。

标签: reactjsfirebasegoogle-cloud-firestorefirebase-authenticationgoogle-cloud-functions

解决方案


Firebase 身份验证的 onCreate 处理程序总是在新用户创建后发生。您不能使用函数触发器“失败”创建用户。

如果您担心对 Firestore 的更新可能会失败,您应该启用重试,以便 Cloud Functions 稍后可以重试。

但是您不需要事务来在 Firestore 中创建新的用户文档。用户的 UID 将是唯一的,这意味着具有相同 ID 的文档不应该已经存在。


推荐阅读