ios - 如何在使用 Firebase Auth 创建用户期间验证字段服务器端?
问题描述
我正在尝试使用 Firebase Auth 创建新用户,但我想在创建新帐户之前使用 Firestore 安全规则验证某些字段(模式匹配)。我怎样才能做到这一点?
在 createUser(withEmail: , password:) 函数的完成处理程序中,我在成功创建帐户后对 Firestore 执行了一些写入操作。
我面临一个问题,有时由于 Firestore 安全规则(模式匹配),对 Firestore 的写入可能不会成功。在这种情况下,写入失败,但仍会创建新用户帐户(因为正在完成处理程序中尝试写入)。
// Create User Method - Firebase Auth & Swift
Auth.auth().createUser(withEmail: self.emailTextField.text!, password: self.passwordTextField.text!) { (result, error) in
if error != nil {
print(error?.localizedDescription)
} else {
let userName = [
userName:self.userNameTextField.text!
]
// Writing field Data to Firestore
Firestore.firestore().collection("users").document(self.userNameTextField.text!).setData(userName) {(err) in
if err != nil {
// Rather than throwing a fatalError, how can I ensure new account creation is cancelled so that feedback can be given on the issue with entered field data?
fatalError()
}
我想确保不会创建用户帐户,以防由于与 Firestore 安全规则冲突而导致对 Firestore 的写入失败。
解决方案
Firebase 身份验证没有任何安全规则。目前无法在创建用户之前检查传入的帐户属性是否有效。安全规则仅适用于从移动或网络客户端直接读取和写入 Cloud Firestore(或实时数据库或 Cloud Storage)的数据。
您唯一能做的就是在创建帐户后使用Cloud Functions 身份验证触发器检查帐户属性,然后在出现问题时删除或停用帐户。
推荐阅读
- c++ - 如何将参数添加到流缓冲区c ++
- validation - 如何保存具有验证规则的记录
- android - 不关注此内容时显示 TextInputEditText 的标签
- c# - WPF SkiaSharp Canvas 点击鼠标位置
- java - 在使用新的 spring-data-neo4j 6.0.0-SNAPSHOT 进行测试期间获取到内存中 neo4j 实例的连接错误
- javascript - 为处理事件的普通 Promise 命名为 Promise Chainy
- php - 为什么 PHP 分配的内存比加载的图像多?
- python - 如何用另一个日期替换 datetime64[ns] -Pandas 的日期组件
- c# - 在 C# 中修改像素的最快方法是什么
- javascript - Vue,push到数组后,所有属性同时反应