Sök…


Hur man sparar användarprofildata

Varje autentiserad användare har en Firebase uid som är unik för alla leverantörer och returneras i resultatet av varje autentiseringsmetod.

Ett bra sätt att lagra din användares data är att skapa en nod för att behålla alla användares data och skydda dem med dina säkerhetsregler

- Databas

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

- Säkerhet

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

$uid i ovanstående regler är en så kallad "dollarvariabel", som säkerställer att reglerna under den tillämpas på alla underordnade noder för users . Mer information finns i dokumentationen om Använda $ -variabler för att fånga bansegment .

Varför sparar användardata i databasen

Firebase Authentication tillåter användare av din app att logga in med sociala leverantörer eller deras e-post + lösenord. Men vad händer om du vill lagra ytterligare information om en användare, utöver vad Firebase Authentication tillåter dig att ange?

Eller vad händer om du vill visa en lista över användare i din app? Firebase Authentication har inget API för detta.

De flesta utvecklare löser detta problem genom att lagra ytterligare information i en separat databas. Detta ämne täcker hur du lagrar sådan information i Firebase Realtime-databasen .

Hantering av användarkontodata i realtidsdatabasen

Firebase-godkännandesystemet är källan till en användares uid , displayName , photoURL och kanske email . Lösenordsbaserade konton ställer in dessa bestående värden i autorisationssystemet via .updateProfile metoden. Lagring av dessa värden i Realtime Database, rDB, users nod utgör frågan om inaktuella data. Visningsnamn kan till exempel ändras. För att hålla dessa värden synkroniserade använder du lokal lagring i .onAuthStateChange med .onAuthStateChange .

på varje .onAuthStateChange

  • getItem('displayName') och getItem('photoURL')
  • jämföra med user.displayName och user.photoURL
  • om annorlunda
    • setItem('displayName') och setItem('photoURL')
    • db.ref.child('users').update värdena för displayName och / eller photoURL

.onAuthStateChange bränder på varje sida laddas eller laddas på nytt, samt på varje ändring av tillstånd. Det kan potentiellt skjutas ofta, t.ex. appar på flera sidor. Men läsning och skrivning till lokal lagring är synkron och mycket snabb så det kommer inte att bli någon märkbar inverkan på appens prestanda.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow