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 数据库中的数据?

在android studio中使用firebase实时数据库检索当前登录用户的数据

检查 Firebase 实时数据库中的现有值

我们如何将数据写入firebase实时数据库?即使启用了读/写,但似乎不起作用