reactjs - 如何创建新用户并将多个用户属性作为事务添加到 Firestore?
问题描述
我正在尝试使用 firebase.auth.onCreate(); 创建一个新用户;我想创建一个具有多个额外属性(即性别、年龄)的用户。我不知道如何将其作为事务完成,或者如何将额外的属性传递到此 onCreate 中,因此云函数只需将额外的属性添加到 firestore 中。
我正在使用电子邮件、密码、显示名称和默认 profileImage 创建新用户。我可以使用 onCreate 云函数将 displayName、email 和 profileImage 添加到 Firestore。出现的问题是,如果在 auth 中创建用户返回的承诺中添加额外的字段,那么如果创建用户成功,但在数据库中添加有关用户的额外基本信息失败,那么我半生不熟用户。如果 firestore.firestore().collection()...set() 调用失败,我不想完全删除用户(这是一个 hacky 解决方案)。
这样,如果创建用户成功但将用户添加到 Firestore 失败,如果我使用事务,整个用户注册将失败。如果我可以传递额外的属性,那么至少云功能由于客户端错误而失败的可能性基本上是没有的。
解决方案
Firebase 身份验证的 onCreate 处理程序总是在新用户创建后发生。您不能使用函数触发器“失败”创建用户。
如果您担心对 Firestore 的更新可能会失败,您应该启用重试,以便 Cloud Functions 稍后可以重试。
但是您不需要事务来在 Firestore 中创建新的用户文档。用户的 UID 将是唯一的,这意味着具有相同 ID 的文档不应该已经存在。
推荐阅读
- python - Pandas:删除具有 nan 值索引的行
- wpf - 使用文本大小放大单选按钮和复选框项目符号绑定
- r - r - 将 filter() 应用于 data.frame 的难度
- asp.net - 如何使用asp.net和angularJS将文件Excel导入数据库中的多个表?
- riscv - 如何监测火箭芯的性能?
- hadoop - 如何在 Yarn Web UI 中启用“终止应用程序”按钮
- javascript - array.reduce 中的 Math.max 或 sum 在性能方面更好
- scala - 获取broadcast_22的broadcast_22_piece0失败
- laravel - 获取服务器的所有 GET 请求,或一些 Laravel GET 请求日志?
- python - 如何让 Bottle 拒绝过大的上传文件?