2 votes

Erreur Domain=FIRFirestoreErrorDomain Code=7 "Permissions manquantes ou insuffisantes."

J'ai donc le code suivant qui récupère les documents de firestore, cette fonction est appelée dans mon viewDidLoad() :

func loadAnnotations() {

    db.collection("jumpSpotAnnotations").getDocuments { (querySnapshot, error) in
        if let error = error {
            print("There was an issue retrieving data from Firestore: \(error)")

            let alertController = UIAlertController(title: "Oops!", message: "We are having trouble loading the cliff jumping locations.  Be sure to check your internet connection.", preferredStyle: .alert)

            let okayAction = UIAlertAction(title: "Okay", style: .cancel, handler: nil)

            alertController.addAction(okayAction)

            self.present(alertController, animated: true, completion: nil)
        } else {
            if let snapshotDocuments = querySnapshot?.documents {
                //print(snapshotDocuments)
                for doc in snapshotDocuments {

Le reste de la fonction n'est pas important. J'obtiens une erreur lors de la récupération des données : Error Domain=FIRFirestoreErrorDomain Code=7 "Permissions manquantes ou insuffisantes." Lorsque j'ai obtenu cela, j'ai réalisé que cela était dû au fait que je n'avais pas mis à jour mes règles de sécurité depuis le premier jour où le projet Firebase pour l'application a été créé, et 30 jours se sont écoulés, de sorte que Google ne pourrait plus accéder jusqu'à ce que je mette à jour les règles. Ce sont les règles ORIGINALES :

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

Pour les besoins de cette application, je suis d'accord pour que l'utilisateur crée et lise n'importe quelle donnée. En revanche, je ne veux pas qu'il puisse modifier ou supprimer des données. J'ai donc posé une question ici sur Stack sur la façon de le faire, et j'ai reçu une réponse ici : Comment empêcher la suppression/modification des documents Firestore, mais autoriser toutes les lectures et écritures ? Donc mes règles de sécurité mises à jour sont maintenant :

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /collection1/{jumpSpotAnnotations} {
      allow read, create;
    }
  }
}

Cependant, je reçois toujours la même erreur lorsque j'essaie de récupérer les données. Les nouvelles règles de sécurité ONT été publiées. Ma question est donc la suivante : dois-je faire quelque chose après avoir appuyé sur le bouton "Publier" pour le mettre à jour officiellement et faire en sorte que mon simulateur puisse récupérer les données, OU est-ce que le problème est que mon code dans mes règles de sécurité ou ma fonction dans Xcode est incorrect pour ce que je veux faire. Gardez à l'esprit que la fonction dans Xcode a fonctionné parfaitement avec les règles originales (j'ai fait les règles complètement ouvertes comme ça quand j'ai créé le projet Firestore pour que je puisse tester dans le simulateur facilement). Toute aide est la bienvenue !

-1voto

Doug Stevenson Points 6978

Dans ma réponse à votre précédente question, je vous ai suggéré de citer les noms des différentes collections. Vous avez juste pris ce que j'ai donné et l'avez copié mot à mot. Vous devez utiliser le nom de la collection réelle dans votre règle :

    match /jumpSpotAnnotations/{id} {
      allow read, create;
    }

Encore une fois, je vous recommande vivement de lire la documentation que j'ai citée en lien afin d'apprendre le fonctionnement des règles de sécurité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X