Ich möchte von einem Controller aus prüfen, ob es sich um eine gesicherte Seite handelt oder nicht. Wie geht das?
Mein Anwendungsfall ist der folgende:
Danke für Ihre Hilfe!
Aurel
Wenn Symfony2 eine Anfrage verarbeitet, entspricht sie dem URL-Muster mit jeder in app/config/security.yml
definierten Firewall. Wenn das URL-Muster mit einem Muster der Firewall übereinstimmt, erstellt Symfony2 einige Listener-Objekte und ruft die Methode handle
dieser Objekte auf. Wenn ein Listener ein Response
-Objekt zurückgibt, bricht die Schleife ab und Symfony2 gibt die Antwort aus. Der Authentifizierungsteil wird in Authentifizierungs-Listenern ausgeführt. Sie werden aus der in der angepassten Firewall definierten Konfiguration erstellt, z. B. form_login
, http_basic
usw. Wenn der Benutzer nicht authentifiziert wird, erstellen authentifizierte Listener ein RedirectResponse
-Objekt, um den Benutzer zur Anmeldeseite umzuleiten. In Ihrem Fall können Sie schummeln , indem Sie einen benutzerdefinierten Authentifizierungslistener erstellen und ihn in Ihre Firewall für gesicherte Seiten einfügen. Beispielimplementierung würde folgen,
Erstellen Sie eine Klasse Token
,
Erstellen Sie eine Klasse, die AuthenticationProviderInterface
implementiert. Für form_login
Listener authentifiziert es sich mit der angegebenen UserProvider
. In diesem Fall wird es nichts tun.
Erstellen Sie eine Einstiegspunktklasse. Der Listener erstellt ein RedirectResponse
aus dieser Klasse.
Erstellen Sie eine Listener-Klasse. Hier implementieren Sie Ihre Umleitungslogik.
%Vor%Erstellen Sie die Dienste.
%Vor% Registrieren Sie den Listener. Erstellen Sie einen Ordner namens Security/Factory
im Ordner DependencyInjection
des Bundles. Dann erstellen Sie die Factory-Klasse.
Fügen Sie in Ihrem NamespaceBundle.php
Ihres Bundle-Ordners folgenden Code hinzu:
Authentifizierungs-Listener ist erstellt, puh :). Jetzt in Ihrem app/config/security.yml
folgendes tun.
Ich weiß nicht, ob das die richtige Methode ist Aber Sie können Folgendes versuchen
/vendor/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php hat eine Methode handleRaw , die eine Anfrage in eine Antwort konvertiert. Auf das Anfrageobjekt kann von dort zugegriffen werden. Sie können überprüfen, ob der Client den Zugriff auf die gesicherte Seite angefordert hat. Wenn ja, können Sie den Controller wie
manuell einstellen %Vor%Eine andere Lösung wäre, eine Sitzung zu setzen, wenn der Benutzer versucht, auf eine gesicherte Seite zuzugreifen und nach dem gleichen in Ihrem Controller zu suchen
Auch dies ist möglicherweise nicht die richtige Methode, aber es ist eine mögliche Problemumgehung