Szukaj…


Jak zapisać dane profilu użytkownika

Każdy uwierzytelniony użytkownik ma Firebase uid to unikalna na wszystkich dostawców i jest zwrócony w wyniku każdej metody uwierzytelniania.

Dobrym sposobem na przechowywanie danych użytkownika jest utworzenie węzła, który przechowuje wszystkie dane użytkowników i chroni je przy użyciu reguł bezpieczeństwa

- Baza danych

{
   "users": {
      "uid1" : {
         "name": "Steve",
         "surname": "Jobs"
      },
      "uid2" : {
         "name": "Bill",
         "surname": "Gates"
      }
   }
}

- Bezpieczeństwo

{
    "rules": {
        "users": {
            "$uid": {
                // If node's key matches the id of the auth user
                ".write": "$uid == auth.uid"
            }
        }
    }
}

$uid w powyższych regułach jest tak zwaną „zmienną dolara”, która zapewnia, że reguły pod nią stosowane są stosowane do wszystkich potomnych węzłów users . Aby uzyskać więcej informacji, zobacz dokumentację dotyczącą używania zmiennych $ do przechwytywania segmentów ścieżek .

Po co zapisywać dane użytkownika w bazie danych

Uwierzytelnianie Firebase umożliwia użytkownikom Twojej aplikacji logowanie się do dostawców usług społecznościowych lub ich adresu e-mail + hasła. Ale co, jeśli chcesz przechowywać dodatkowe informacje o użytkowniku, poza tym, co pozwala ci określić Firebase Authentication?

A co jeśli chcesz wyświetlić listę użytkowników w swojej aplikacji? Uwierzytelnianie Firebase nie ma do tego interfejsu API.

Większość programistów rozwiązuje ten problem, przechowując dodatkowe informacje w osobnej bazie danych. W tym temacie opisano, jak przechowywać takie informacje w bazie danych Firebase Realtime .

Obsługa danych konta użytkownika w bazie danych w czasie rzeczywistym

System auth Firebase jest źródłem użytkowników uid , displayName , photoURL , a może email . Konta oparte na hasłach ustawiają te trwałe wartości w systemie uwierzytelniania za pomocą metody .updateProfile . Przechowywanie tych wartości w Realtime Database, rDB, węzeł users powoduje problem z nieaktualnymi danymi. Wyświetlane nazwy mogą na przykład ulec zmianie. Aby zsynchronizować te wartości, użyj pamięci lokalnej w połączeniu z .onAuthStateChange .

na każdym .onAuthStateChange

  • getItem('displayName') i getItem('photoURL')
  • porównaj do user.displayName i user.photoURL
  • jeśli inny
    • setItem('displayName') i setItem('photoURL')
    • db.ref.child('users').update wartości displayName i / lub photoURL

.onAuthStateChange uruchamia się przy każdym ładowaniu lub ładowaniu strony, a także przy każdej zmianie stanu .onAuthStateChange . Potencjalnie strzela często, np. Aplikacje wielostronicowe. Jednak odczytywanie i zapisywanie w lokalnej pamięci jest synchroniczne i bardzo szybkie, więc nie będzie zauważalnego wpływu na wydajność aplikacji.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow