2017-07-03 1 views
2

Gemäß der documentation werden die Werte für alle Anbieter angegeben, mit Ausnahme der Telefonauthentifizierung. Ich möchte in meiner Datenbank überprüfen, ob sich ein Benutzer sowohl mit der Telefonauthentifizierung als auch mit Facebook authentifiziert hat. Das Schreiben einer Regel als auth.provider === 'facebook' funktioniert, aber auth.provider === 'phone' nicht. Logischerweise, wenn der erste funktioniert, sollte der zweite nicht funktionieren, aber was ist, wenn ich sage, dass ich mich beim ersten Mal immer mit den Telefon-Zugangsdaten und den Facebook-Zugangsdaten mit den Zugangsdaten des Telefons anmelde? Auf den Punkt gebracht:Wert von Authentifizierungsanbieter für die Telefonauthentifizierung und Facebook in der Firebase-Datenbank

  1. Gibt es einen Wert von auth.provider für Phone Authentication? Wenn ja, was ist das?
  2. Gibt es eine Möglichkeit zu überprüfen, ob der Benutzer sowohl Facebook als auch Phone als Provider in meiner Datenbank hat? Es ist mir egal, ob der Benutzer sich mit einem von beiden anmeldet. Das einzige, was ich möchte, ist, dass der Benutzer seine Facebook-Anmeldeinformationen mit dem Telefon verknüpft haben sollte.
  3. Angenommen, auth.provider gibt nur den Wert des Anbieters an, der für die Anmeldung verwendet wurde. Warum funktioniert auth.provider === 'facebook', wenn ich mich nie bei einem Benutzer mit Facebook anmelde und ihn nur mit den Anmeldedaten des Telefons verknüpfe?

Update:

  1. Mit etwas Versuch und Irrtum, so scheint es, dass, wenn Telefon-Authentifizierung die einzige Methode verwendet wird, dann auth.provider ist eigentlich anonymous, nichtphone.
  2. Auch basierend auf bojeil's Antwort, auth.token.firebase.identities["phone"] !=null entpuppt sich als true. Zu beachten ist, dass dies nicht in der documentation dokumentiert ist. Zitiert aus der Dokumentation:

firebase.identities: Wörterbuch aller Identitäten, die mit diesem Benutzerkonto zugeordnet sind. Die Schlüssel des Wörterbuchs können Sie eine der folgenden sein: E-Mail, google.com, facebook.com, github.com, twitter.com.

Keine Erwähnung von Telefon hier entweder. Der letzte Tag, an dem die Seite aktualisiert wurde, war 17. Mai 2017. Man kann sich nur vorstellen, wie schäbig die Dokumentation ist, wenn man berücksichtigt, dass das Firebase SDK für Javascript (v4.0.0), das die Unterstützung der Telefon-Authentifizierung beinhaltet, an diesem Tag veröffentlicht wurde (siehe release notes).

+1

Hey Mayank versuchen Sie mit 'auth.token.firebase.sign_in_provider === 'Telefon'' anstelle von 'auth.provider'. Ich werde berichten, dass 'auth.provider' nicht gefüllt ist und die Dokumente bezüglich Token-Daten nicht aktuell sind. – bojeil

+0

'auth.token.firebase.sign_in_provider ===" Telefon "funktioniert. Außerdem funktioniert 'auth.provider ===' anonymous '. Scheint ein Fehler zu sein. –

+0

Ich habe diesbezüglich einen Fehlerbericht eingereicht. Die Verwendung von auth.provider === "anonymous" ist definitiv falsch. Ein anonymer Benutzer wird diese Prüfung bestehen. Sie sollten den vorherigen Scheck verwenden, bis der letztere behoben ist. – bojeil

Antwort

0

Durch einige der undokumentierte Funktionen (lesen Sie die Frage Grund) zu nutzen, kann man die folgende Regel schreiben die Aufgabe zu erfüllen:

$uid === auth.uid && auth.token.firebase.identities['phone']!=null && auth.token.firebase.identities['facebook.com']!=null

Aktualisierung: Diese Lösung funktioniert perfekt wie in der aktualisierten Dokumentation.

1

Für Datenbank-/Speicherregeln zeigt auth.provider nur den Provider an, der zur Authentifizierung des Benutzers verwendet wird, und generiert das Token (nicht das zum Verknüpfen verwendete Token). Dies kann entweder phone oder facebook sein. Es kann nicht beides sein. Sie authentifizieren sich nur mit jeweils einem Benutzer. Firebase unterstützt keine Multi-Faktor-Authentifizierung.

Das heißt, wenn Sie beide Anbieter verknüpft der Benutzer überprüfen möchten, die richtige Art und Weise zu überprüfen, um zu tun ist: https://firebase.google.com/docs/reference/security/database/#authtoken Insbesondere auth.token.firebase.identities können Sie überprüfen, ob die folgenden sind: auth.token.firebase.identities["facebook.com"] auth.token.firebase.identities["phone"]

Verwandte Themen