Par défaut, la base de données d'un projet dans la console Firebase n'est lisible / inscriptible que par les utilisateurs administratifs (par exemple dans Cloud Functions ou les processus qui utilisent un SDK Admin). Les utilisateurs des SDK côté client standard ne peuvent pas accéder à la base de données, sauf si vous modifiez les règles de sécurité côté serveur.
Vous pouvez modifier les règles afin que la base de données ne soit lisible / inscriptible que par les utilisateurs authentifiés:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Consultez le guide de démarrage rapide pour les règles de sécurité de la base de données Firebase .
Mais comme vous ne connectez pas l'utilisateur à partir de votre code, la base de données vous refuse l'accès aux données. Pour résoudre ce problème, vous devrez soit autoriser l'accès non authentifié à votre base de données, soit vous connecter à l'utilisateur avant d'accéder à la base de données.
Autorisez l'accès non authentifié à votre base de données
La solution de contournement la plus simple pour le moment (jusqu'à ce que le didacticiel soit mis à jour) consiste à accéder au panneau Base de données de la console pour votre projet, à sélectionner l'onglet Règles et à remplacer le contenu par ces règles:
{
"rules": {
".read": true,
".write": true
}
}
Cela rend votre nouvelle base de données lisible et inscriptible par quiconque connaît l'URL de la base de données. Assurez-vous de sécuriser à nouveau votre base de données avant de passer en production, sinon quelqu'un risque de commencer à en abuser.
Connectez-vous à l'utilisateur avant d'accéder à la base de données
Pour une solution (légèrement) plus longue, mais plus sécurisée, appelez l'une des signIn...
méthodes d' authentification Firebase pour vous assurer que l'utilisateur est connecté avant d'accéder à la base de données. Le moyen le plus simple de le faire est d' utiliser l'authentification anonyme :
firebase.auth().signInAnonymously().catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
Et puis attachez vos écouteurs lorsque la connexion est détectée
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
var isAnonymous = user.isAnonymous;
var uid = user.uid;
var userRef = app.dataInfo.child(app.users);
var useridRef = userRef.child(app.userid);
useridRef.set({
locations: "",
theme: "",
colorScheme: "",
food: ""
});
} else {
// User is signed out.
// ...
}
// ...
});
J'étais confronté à un problème similaire et j'ai découvert que cette erreur était due à des règles incorrectes définies pour les opérations de lecture / écriture pour la base de données en temps réel. Par défaut, Google Firebase charge de nos jours le cloud store et non la base de données en temps réel. Nous devons passer au temps réel et appliquer les bonnes règles.
Comme nous pouvons le voir, il est dit que cloud Firestore n'est pas une base de données en temps réel, une fois basculé vers la base de données correcte, appliquez les règles suivantes:
la source
Accédez à l'option "Base de données" que vous avez mentionnée.
Copié à partir d' ici .
la source
Aller à la base de données, à côté du titre, il y a 2 options:
Cloud Firestore, base de données en temps réel
Sélectionnez Base de données en temps réel et accédez aux règles
changer les règles en vrai.
Cela a résolu mon problème.
la source
Ça marche..!!
la source
OK, mais vous ne voulez pas ouvrir toute la base de données en temps réel! Vous avez besoin de quelque chose comme ça.
ou
la source
Une autre solution consiste à créer ou à connecter automatiquement l'utilisateur si vous disposez déjà des informations d'identification. Voici comment je le fais en utilisant Plain JS.
la source