Firebase数据库setValue:或removeValue:失败:iOS Swift 4中的Permission_denied

时间:2019-01-17 17:39:54

标签: ios swift firebase firebase-realtime-database

我在stackoverflow中看到了很多答案,但是没有人为我工作!

这是我的代码:-

import UIKit
import Firebase
class ViewController: UIViewController {

    @IBOutlet var txt: UITextField!
    var ref = DatabaseReference.init()
    override func viewDidLoad() {
        super.viewDidLoad()
        loginAnony()
        self.ref = Database.database().reference()
    }

    func loginAnony(){
        Auth.auth().signInAnonymously(){
            (user,error) in
            if let error = error{
                print(error.localizedDescription)
            }else{
                print("User ID\(user?.user.uid)")
            }
        }
    }

    @IBAction func btnClick(_ sender: Any) {
        self.ref.child("chat").setValue("Yogesh")
    }

}

我的数据库规则:-

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
    }
  }
}

我已经删除了:-

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

但是仍然无法正常工作,任何人都可以在Advanced中感谢我。

1 个答案:

答案 0 :(得分:1)

需要像这样在您的AppDelegate中配置Firebase

func application(_ application: UIApplication, didFinishLaunchingWithOptions... {
        FirebaseApp.configure()

然后在您的viewController中设置一个类var:

class ViewController: UIViewController{
    var ref: DatabaseReference!

所以,不要这样做:var ref = DatabaseReference.init()

然后在viewDidLoad中,初始化var类,然后进行身份验证

override func viewDidLoad() {
   super.viewDidLoad()
   self.ref = Database.database().reference()
   //proceed to authenticate

此外, Firestore 规则不适用于Firebase实时数据库,它具有自己的一组规则。

service cloud.firestore //doesn't do anything to RTDB

因此,将Firebase数据库规则保留为默认值

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}