2016-07-15 22 views
4

Ich habe die Firebase-Datenbank auf Version 9.2.0 aktualisiert. Die Firebase-UID war früher google: (google signin id), aber es passt jetzt nicht.google signin uid & firebase uid stimmen nicht überein, nachdem Firebase auf 9.2.0 aktualisiert wurde

Vor Upgrade -

Google Signin uid = 101672719428298324455

Firebase uid = google: 101672719428298324455

Nach dem Upgrade -

Google Signin uid = 101672719428298324455

Firebase uid = fcojpImyQWTHp02YzWYsRezShKP2

Die Google-UID wird von anderen Diensten wie Klassenraum zurückgegeben, also müssen wir diese als UID verwenden, um zu sagen, um welchen Benutzer es sich handelt. Wir werden das Benutzerfeld aktualisieren, um die Google-Anmelde-UID anstelle des Firebase-Servers zu verwenden.

Aber wie schreiben wir dann Sicherheitsregeln für die Authentifizierung mit der Google Sign-in-UID mit der aktualisierten Firebase? Spezifischer Anwendungsfall für die Regeln ist, dass ein Lehrer die Zeugniskarte eines Schülers lesen kann. Lehrer- und Schüler-UIDs, die von Google Classroom für die Klassenzugehörigkeit bereitgestellt werden, entsprechen den Google-Anmelde-UIDs, nicht der Firebase-UID.

Unterhalb der Code verwendet wird, nach dem Upgrade anmelden -

FirebaseAuth auth = FirebaseAuth.getInstance(); 
     AuthCredential credential = GoogleAuthProvider.getCredential(token, secret); 
     auth.signInWithCredential(credential).addOnCompleteListener(new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 

       // Authenticated successfully with payload authData 
       AuthResult result = task.getResult(); 
       FirebaseUser user = result.getUser(); 

Die Schüler für die Klasse geladen werden, mit Google-Klassenzimmer

"google:101379167706178411999": { 
    "profile" : { 
    "course" : { 
     "students" : { 
     "google:102942138935686001927" : { 
      "profile" : { 
      "name" : "student1 U." 
      } 
     }, 
     "google:111992383609839990527" : { 
      "profile" : { 
      "name" : "student2 U." 
      } 
     } 
     } 
    }, 
    "email" : "...", 
    "name" : "teacher User", 
    } 
} 

Dann Lehrer verwendet die Google-signin ids Fragen Sie den Schüler -

+0

Sind diese Benutzer vor dem Upgrade vorhanden? In diesem Fall sollte der Benutzer die gleiche UID erhalten haben, als er sich im aktualisierten Backend angemeldet hat. –

+0

Nein. Wir haben vor der Produktion ein Upgrade durchgeführt. Wir machen uns bereit für die Produktion. Neue Datenbank mit neuer Firebase-Konsole erstelltEs ist auch ein Problem für neue Benutzer, da die IDs, die google-classroom für sie hält (google sign-in id), nicht die eine ist, die firebase als auth.guid hat – anar

Antwort

2

Für bestehende Benutzer wird ihre UID nicht ändern, wenn yo Sie importieren ein vorhandenes Projekt in die neue Firebase-Konsole (https://console.firebase.google.com). Benutzer, die nach dem Importieren des Projekts erstellt wurden, erhalten jedoch das neue uid-Format. Dies ist beabsichtigt: Sie sollten sich nicht auf eine inhärente Struktur in der UID Firebase verlassen.

Wenn Sie die Google ID für einen Nutzer kennen möchten, der mit einem Google-Konto bei der Firebase-Authentifizierung angemeldet ist, können Sie das Feld currentUser aufrufen. Aus der Dokumentation auf accessing a user's provider-specific profile information:

die Profilinformationen aus dem Anmelde-Anbieter zu einem Benutzer verknüpft abgerufen zu erhalten, die getProviderData Methode verwenden. Zum Beispiel:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
if (user != null) { 
    for (UserInfo profile : user.getProviderData()) { 
     // Id of the provider (ex: google.com) 
     String providerId = profile.getProviderId(); 

     // UID specific to the provider 
     String uid = profile.getUid(); 

     // Name, email address, and profile photo Url 
     String name = profile.getDisplayName(); 
     String email = profile.getEmail(); 
     Uri photoUrl = profile.getPhotoUrl(); 
    }; 
} 

Sie werden bemerken, dass getProviderData eine Liste von UserInfo Objekten heutzutage gibt, da ein einzelnes Benutzerkonto mehr verknüpfte Anbieter haben.

Verwandte Themen