2016-08-22 2 views
4

Ich habe es mit Firebase Authentifizierung für das Web. Die documentation besagt, dassFirebase: letzten Login angefordert

Einige sicherheitsrelevante Aktionen-wie ein Konto zu löschen, eine primäre E-Mail-Adresse Einstellen und Ändern eine kennwort erfordern, dass der Benutzer vor kurzem in unterzeichnet hat.

Wenn Nicht, die Anfrage würde mit dem Fehlercode auth/requires-recent-login fehlschlagen, und ich sollte den Fall verwalten, indem ich den Benutzer auffordere, seine Anmeldeinformationen erneut einzugeben. Nachdem ich das getan habe, kann ich einfach den Benutzer mit dem folgenden Code erneut authentifizieren:

firebase.auth().currentUser.reauthenticate(credential) 

In den API reference es einige Details mehr. Es stellt sich heraus, credential ist eigentlich ein Objekt des Typs firebase.auth.AuthCredential. Davon abgesehen, habe ich noch eine Reihe von Fragen, auf die ich nicht beantworten konnte auf der Dokumentation finden:

  1. Wie erstelle ich das AuthCredential Objekt?
  2. Noch wichtiger, wie gehe ich mit Anbietern (Google, Facebook, ...). Ich stimme zu, dass die Änderung von E-Mail/Passwort für Anbieter nicht sinnvoll ist, da dies nicht der richtige Ort ist, um sie zu ändern, sodass die erneute Authentifizierung in diesem Fall nicht zutrifft. Löschen eines Benutzers ist jedoch immer noch eine Aktion, die erneute Authentifizierung erfordert, und dies könnte unabhängig von der Authentifizierungsmethode durchgeführt werden. Wie authentifiziere ich einen Benutzer erneut, der sich bei einem Anbieter angemeldet hat?
  3. Die Dokumentation besagt, dass sich der Benutzer vor kurzem anmelden muss. Ich konnte in den Dokumenten keine Definition von recent finden.

Antwort

3
  1. Sie einen Berechtigungsnachweis durch den Aufruf Credential statische Methode auf jedem Provider initialisieren kann (einschließlich E-Mail/Passwort-Provider): firebase.auth.FacebookAuthProvider.credential(fbAccessToken);

  2. ein OAuth-Anbieter erneut authentifizieren, können Sie in einem Browser signInWithPopup nennen oder umleiten. Dies wird ein Objekt mit 2 Feldern zurückgeben: Benutzer und Berechtigungsnachweis. Sie können diese Berechtigung direkt verwenden. Hier ist ein vereinfachtes Beispiel:

    var tempApp = firebase.initializeApp(originalConfig, 'temp'); var provider = new firebase.auth.FacebookAuthProvider(); tempApp.signInWithPopup(provider).then(function(result)) { tempApp.auth().signOut(); originalApp.auth().currentUser.reauthenticate(credential); });

  3. das macht nichts, da der Feuerbasis-Authentifizierungs-Backend das ändern könnte. Sie sollten diesen Wert nicht fest codieren. Versuchen Sie stattdessen, diesen Fehler zu erkennen und entsprechend zu handeln.

+0

Danke für die Info. Aber wie bekommst du den fbAccessToken? – Richard

+0

Was ist Ihr Anwendungsfall? 1. nimmt an, dass Sie es bereits haben. Vielleicht von der Facebook sdk. – bojeil