Ok, ich habe meinen Kopf an die Wand geschlagen, um einen halben Tag lang versuchen zu können, dies zu lösen. Grund dafür ist, dass ich aufgrund meines Wissensstandes mit AngularFire2
und Angular2
etwas Anfänger bin .
Ich habe eine Anwendung, ein einfaches Login-Formular, das AngularFire2
verwendet, verbindet sich mit Facebook
, ruft die Benutzer Access Token
und Facebook Id
ab und ruft dann die Facebook Graph API
auf, die Vorname, Nachname, Geschlecht, E-Mail usw. zurückgibt .
Wie hier gezeigt:
%Vor% Facebook Id
= Kommt von auth
Access Token
= Kommt von authState
Ich speichere dann die von Facebook Graph API
zurückgegebenen Informationen in Firebase
.
Nun kommt das Problem, wie Sie in der oben angegebenen Funktion sehen können, ich habe die auth
-Methode abonniert, dies ermöglicht mir den Zugriff auf die Facebook Id
und die Access Token
, die erforderlich sind, um% co_de aufzurufen %
In der Navigation meiner Anwendung habe ich eine Logout-Taste. Wenn der Benutzer auf diese Schaltfläche klickt, rufe ich
auf %Vor% Sobald ich mich abgemeldet habe, wird meine oben angegebene Funktion aufgerufen, weil ich die Änderung von Facebook Graph API
abonniert habe. Ich habe eine if-Anweisung hineingestellt, um zu überprüfen, ob auth null ist. Wenn ja, was funktioniert - Scheint ein bisschen hacky zu mir.
Wenn ich versuche, mich wieder anzumelden, schlägt die URL für den Aufruf von auth
auf Facebook Graph API
fehl, die angibt, dass es ${auth.facebook.uid}
ist. Ich bin mir nicht ganz sicher, warum dies fehlschlagen würde, weil es für mich als neu eingestuft wird Melden Sie sich an, damit die Methode von Anfang bis Ende erneut ausgeführt werden sollte.
Jetzt ist meine Frage:
Wie kann ich mich in meinem Login mit Facebook-Methode um den undefined
kümmern? und immer noch Zugriff auf die auth
und Facebook Id
Ich versuche einen Weg zu finden, wie die Methode für zwei Szenarien funktioniert:
Die Abmeldung und die Anmeldung / Anmeldung sollten beide voneinander isoliert sein und sich nicht gegenseitig behindern.
Wenn jemand irgendwelche Kenntnisse teilen oder einen viel saubereren Weg vorschlagen kann, würde ich es sehr zu schätzen wissen.
Aktualisieren
Ich habe ein Repository in Access Token
erstellt, das eine heruntergefahrene Version meiner Anwendung ist und den Fehler anzeigt, den ich habe.
Um zu replizieren:
In der Github
loginWithFacebook-Methode sehen Sie diese Codezeile:
Kommentieren Sie dies und folgen Sie den nachstehenden Schritten.
Sie werden feststellen, dass Sie sich zum ersten Mal einloggen, sobald Sie sich abmelden und sich erneut mit Facebook anmelden. Die Grafik-API schlägt fehl, weil login.service
nicht definiert ist.
Jetzt Idealerweise möchte ich den Authentifizierungsgrund nicht abonnieren, weil wir die Anmeldung mit Google und E-Mail und Passwort durchführen werden.
Der einzige Ort, an dem ich das Ereignis auth.facebook.uid
abonnieren möchte, wäre in der Navigationsleiste, die die Menüführung ändert, wenn der Benutzer autorisiert wird.
HINWEIS: Dies ist mit einem Testkonto auf Firebase verknüpft. Sobald dieses Problem gelöst wurde, wird das Testkonto gelöscht. Alle Kontoinformationen, die zum Testen verwendet wurden, werden gelöscht.
Endgültiges Update
Ok, also habe ich beschlossen, ein Kopfgeld dafür zu eröffnen, um eine Lösung zu finden.
Der einzige Weg, wie ich das sehen kann, ist eine Login-Seite, diese Login-Seite wird für neue und bestehende Benutzer sorgen, wenn der Benutzer sich mit Facebook anmeldet, wenn sie neu sind, dann rufen Facebook Graph API Informationen über sie und dann speichern Sie es, wenn sie vorhanden sind, dann rufen Sie nicht die Facebook Graph API auf.
Wie ich erwarte, dass das funktioniert:
Neuer Benutzer:
%Vor%Vorhandener Benutzer
Wenn der Benutzer sich bereits über Facebook angemeldet hat, wenn er sich anmeldet, möchte ich die Facebook Graph API nicht aufrufen, der Aufruf des Graphen ist nur einmal für neue Benutzerkonten erforderlich.
Auch das Repo ist noch verfügbar.
Fehler in der Konsole, nach der ersten Registrierung, Abmeldung, Anmeldung:
AngularFire2 Paket json
%Vor%Tags und Links authentication angular angularfire2