Standardmäßig ist die Datenbank in einem Projekt in der Firebase-Konsole nur für Administratoren lesbar / beschreibbar (z. B. in Cloud-Funktionen oder Prozessen, die ein Admin-SDK verwenden). Benutzer der regulären clientseitigen SDKs können nur dann auf die Datenbank zugreifen, wenn Sie die serverseitigen Sicherheitsregeln ändern.
Sie können die Regeln so ändern, dass die Datenbank nur von authentifizierten Benutzern gelesen / beschrieben werden kann:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Informationen zu den Sicherheitsregeln für die Firebase-Datenbank finden Sie im Schnellstart .
Da Sie den Benutzer jedoch nicht über Ihren Code anmelden, verweigert Ihnen die Datenbank den Zugriff auf die Daten. Um dies zu beheben, müssen Sie entweder nicht authentifizierten Zugriff auf Ihre Datenbank zulassen oder den Benutzer anmelden, bevor Sie auf die Datenbank zugreifen.
Erlauben Sie nicht authentifizierten Zugriff auf Ihre Datenbank
Die derzeit einfachste Problemumgehung (bis das Lernprogramm aktualisiert wird) besteht darin, das Datenbankfenster in der Konsole für Ihr Projekt aufzurufen, die Registerkarte Regeln auszuwählen und den Inhalt durch die folgenden Regeln zu ersetzen:
{
"rules": {
".read": true,
".write": true
}
}
Dadurch kann Ihre neue Datenbank von jedem gelesen und beschrieben werden, der die URL der Datenbank kennt. Stellen Sie sicher, dass Sie Ihre Datenbank erneut sichern, bevor Sie mit der Produktion beginnen. Andernfalls wird sie wahrscheinlich von jemandem missbraucht.
Melden Sie sich beim Benutzer an, bevor Sie auf die Datenbank zugreifen
Rufen Sie für eine (etwas) zeitaufwändigere, aber sicherere Lösung eine der signIn...
Methoden der Firebase-Authentifizierung auf, um sicherzustellen, dass der Benutzer angemeldet ist, bevor Sie auf die Datenbank zugreifen. Der einfachste Weg, dies zu tun, ist die anonyme Authentifizierung :
firebase.auth().signInAnonymously().catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
Fügen Sie dann Ihre Listener hinzu, wenn die Anmeldung erkannt wird
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.
// ...
}
// ...
});
Ich hatte ein ähnliches Problem und stellte fest, dass dieser Fehler auf falsche Regeln für Lese- / Schreibvorgänge für Echtzeitdatenbanken zurückzuführen war. Standardmäßig lädt Google Firebase heutzutage Cloud-Speicher nicht Echtzeit-Datenbank. Wir müssen auf Echtzeit umstellen und die richtigen Regeln anwenden.
Wie wir sehen können, heißt es, dass Cloud Firestore keine Echtzeitdatenbank ist. Sobald auf die richtige Datenbank umgestellt wurde, gelten die folgenden Regeln:
quelle
Gehen Sie zur von Ihnen erwähnten Option "Datenbank".
Von hier kopiert .
quelle
Gehen Sie zur Datenbank, neben dem Titel gibt es 2 Optionen:
Cloud Firestore, Echtzeitdatenbank
Wählen Sie Echtzeitdatenbank und gehen Sie zu Regeln
Ändern Sie die Regeln in true.
Dies löste mein Problem.
quelle
Es klappt..!!
quelle
OK, aber Sie möchten nicht die gesamte Echtzeitdatenbank öffnen! Du brauchst so etwas.
oder
quelle
Eine andere Lösung besteht darin, den Benutzer tatsächlich automatisch zu erstellen oder anzumelden, wenn Sie die Anmeldeinformationen bereits zur Hand haben. Hier ist, wie ich es mit Plain JS mache.
quelle