Domyślnie baza danych w projekcie w Konsoli Firebase jest odczytywana / zapisywana tylko przez użytkowników administracyjnych (np. W Cloud Functions lub w procesach korzystających z pakietu Admin SDK). Użytkownicy zwykłych zestawów SDK po stronie klienta nie mogą uzyskać dostępu do bazy danych, chyba że zmienisz reguły zabezpieczeń po stronie serwera.
Możesz zmienić reguły, aby baza danych była odczytywalna / zapisywalna tylko dla uwierzytelnionych użytkowników:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Zobacz krótkie wprowadzenie do reguł bezpieczeństwa Bazy danych Firebase .
Ale ponieważ nie rejestrujesz użytkownika za pomocą kodu, baza danych odmawia Ci dostępu do danych. Aby rozwiązać ten problem, musisz zezwolić na nieuwierzytelniony dostęp do bazy danych lub zalogować użytkownika przed uzyskaniem dostępu do bazy danych.
Zezwól na nieuwierzytelniony dostęp do bazy danych
Najprostszym rozwiązaniem w tej chwili (do czasu aktualizacji samouczka) jest przejście do panelu Bazy danych w konsoli projektu, wybranie zakładki Reguły i zastąpienie treści następującymi regułami:
{
"rules": {
".read": true,
".write": true
}
}
To sprawia, że twoja nowa baza danych jest czytelna i zapisywalna dla każdego, kto zna adres URL bazy danych. Pamiętaj, aby ponownie zabezpieczyć swoją bazę danych przed rozpoczęciem produkcji, w przeciwnym razie ktoś prawdopodobnie zacznie jej nadużywać.
Zarejestruj użytkownika przed uzyskaniem dostępu do bazy danych
Aby uzyskać (nieco) bardziej czasochłonne, ale bezpieczniejsze rozwiązanie, wywołaj jedną z signIn...
metod uwierzytelniania Firebase, aby upewnić się, że użytkownik jest zalogowany przed uzyskaniem dostępu do bazy danych. Najprostszym sposobem na to jest użycie uwierzytelniania anonimowego :
firebase.auth().signInAnonymously().catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
A następnie dołącz słuchaczy, gdy zostanie wykryte logowanie
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.
// ...
}
// ...
});