Firebase 实时数据库不保存注册页面中的数据
Posted
技术标签:
【中文标题】Firebase 实时数据库不保存注册页面中的数据【英文标题】:Firebase Realtime Database doesn't save data from sign up page 【发布时间】:2018-10-12 03:41:54 【问题描述】:我正在 Swift 中处理应用程序的注册页面。 Firebase 中的身份验证部分运行良好,但数据库没有保存我请求的任何信息。有人可以帮忙吗?
我的代码:
Auth.auth().createUser(withEmail: userEmail,password: userPassword, completion: (User, error) in
if error != nil
print(error as Any)
return
guard let uid = User?.user.uid else return
let ref = Database.database().reference(fromURL:"Database-URL")
let userReference = ref.child("users").child(uid)
let values = ["Firstname": userFirstName,"email": userEmail]
userReference.updateChildValues(values, withCompletionBlock: (error, reference) in
if error != nil
print(error as Any)
return
)
)
控制台打印一个错误
可选(错误域=com.firebase 代码=1“权限被拒绝” UserInfo=NSLocalizedDescription=权限被拒绝)
【问题讨论】:
当error不为nil时,你检查你正在打印的错误了吗? @SahilManchanda 我只看到了这个错误:Optional(Error Domain=com.firebase Code=1 "Permission denied" UserInfo=NSLocalizedDescription=Permission denied) 看看这个问题。它可能会帮助您朝着正确的方向前进***.com/q/40291114/2299040 【参考方案1】:默认情况下,新 Firebase 控制台中项目中的数据库只能由经过身份验证的用户读取/写入:
"rules":
".read": "auth != null",
".write": "auth != null"
请参阅 Firebase 数据库安全规则的快速入门。
由于您没有通过代码让用户登录,因此数据库会拒绝您访问数据。要解决这个问题,您需要允许未经身份验证的访问您的数据库,或者在访问数据库之前登录用户。
允许未经身份验证的访问您的数据库 目前最简单的解决方法(直到教程更新)是进入项目控制台中的“数据库”面板,选择“规则”选项卡并将内容替换为以下规则:
"rules":
".read": true,
".write": true
这使您的新数据库对每个人都具有可读性和可写性。确保在投入生产之前再次保护您的数据库,否则有人可能会开始滥用它。
【讨论】:
【参考方案2】:我可能不确定,但 createUser
的完成不会给你用户和错误,而是 AuthResult 和错误。所以你必须从下面的结果中获取用户
Auth.auth().createUser(withEmail: email, password: password) (authData, error) in
if let error = error
debugPrint("FIREBASE ERROR : \(error.localizedDescription)")
else
if let authData = authData
let user = authData.user //here get the user from result
self.saveToDB(user: user) . //save the user to database
【讨论】:
【参考方案3】:这是从 2019 年 5 月开始的 firebase 新代码。只需将 false 更改为 true,如下所示:
rules_version = '2';
service cloud.firestore
match /databases/database/documents
match /document=**
allow read, write: if true;
【讨论】:
以上是关于Firebase 实时数据库不保存注册页面中的数据的主要内容,如果未能解决你的问题,请参考以下文章
为啥注册用户后 Firebase 实时数据库用户 ID 与 Firebase 身份验证 UID 不匹配?
关于使用android studio在firebase实时数据库中的uid下创建随机密钥
如何在 Swift 中保存实时 Firebase 数据库中的数据?