Ich verwende HWIOAuthBundle, um einen Benutzer mit Oauth anmelden zu lassen, ich habe einen benutzerdefinierten Benutzeranbieter erstellt, der einen Benutzer erstellt, falls dieser nicht existiert:
%Vor%Das Problem ist, dass Twitter zum Beispiel die E-Mail nicht gibt oder ich möchte, dass einige zusätzliche Felder eingefügt werden, bevor ein neuer Benutzer erstellt wird. Gibt es eine Möglichkeit, einen Benutzer zu einem Formular "vollständige Registrierung" umzuleiten, bevor Sie es erstellen?
Ich habe versucht, einen Anforderungslistener hinzuzufügen, der bei jeder Anfrage prüft, ob die E-Mail vorhanden ist und wenn nicht, wird sie auf die complete_registration-Seite umgeleitet, aber sie wird auch umleiten, wenn Der Benutzer geht zur Startseite, um sich auszuloggen oder irgendetwas anderes. Ich möchte ihn nur umleiten, wenn er versucht, auf einige benutzerbeschränkte Seiten zuzugreifen.
Oder besser, erstellen Sie es nicht, bis er alle erforderlichen Informationen gegeben hat.
Ich habe die Lösung selbst gefunden, ich habe manuell eine neue Ausnahme erstellt:
%Vor%Auf diese Weise überprüfe ich im benutzerdefinierten Oauth-Benutzeranbieter, wenn ich überprüfe, ob ein Benutzer existiert oder einen neuen Benutzer erstelle, ob die erforderlichen Felder fehlen:
%Vor%In diesem Fall wird der Benutzer zum Anmeldeformular weitergeleitet, mit dieser Ausnahme in der Sitzung, also auf der Anmeldeseite:
%Vor%Und es wird zu einem Formular mit dem $ user in der Ausnahme umgeleitet, so dass es nur nach den fehlenden Informationen fragen kann und dann den Benutzer anmeldet.
Ich habe bei der Migration auf eine sf-Site ein ähnliches Problem festgestellt. Nach der Migration wollte ich, dass die migrierten Benutzer ihr Profil vervollständigen, während die neu registrierten Benutzer sofort gestartet werden konnten.
Ich habe das ähnlich wie Ihre Idee gelöst, indem ich einen RequestListener verwendet habe, aber eine Whitelist von Seiten hinzugefügt habe, die der Benutzer ohne sein Profil ausführen darf. Abhängig von der Anzahl der Seiten, auf die der Benutzer zugreifen soll, ohne sein Profil zu vervollständigen, können Sie auch eine schwarze Liste verwenden.
Ich habe nicht nach dem Vorhandensein eines bestimmten Feldes gesucht, obwohl ich auf die Profilvervollständigungsseite umgeleitet habe, sondern bei der Migration der Benutzerdatenbank eine Rolle "ROLE_MIGRATION" hinzugefügt. In Ihrem Fall können Sie die Rolle hinzufügen, wenn Sie den Benutzer über oauth erstellen.
Hier der Code meiner Anfrage Listener:
%Vor%Tags und Links oauth symfony symfony-2.1 hwioauthbundle