2017-09-18 2 views
1

Ich muss einige Aktionen vor dem Login-Prozess/zu Beginn des Login-Prozesses tun. Gibt es ein Ereignis vor der Anmeldung oder wie kann ich es implementieren?Symfony - Voranmelde Event Listener

Ich benutze Symfony3 und ich habe ein Formular Login und OAuth Login (HWIOAuthBundle).

Ich habe versucht this, aber es funktioniert nicht mit OAuth-Anmeldung. Oder wie kann ich es auch für den OAuth-Login implementieren?

Antwort

2

Im Allgemeinen werden alle Anmeldungsdaten in Symfony von einem Listener für das Ereignis kernel.request ausgeführt, meist innerhalb des Firewall Listeners der Symfony-Sicherheitskomponente. Ich habe das HWIOAuthBundle Bundle noch nicht benutzt, aber es scheint auch nur die Symfony Security Komponente zu verwenden.

Wenn Sie nur bestimmte Aktionen ausführen möchten, bevor die Anmeldung/Authentifizierung erfolgt, müssen Sie nur einen Ereignis-Listener mit der Priorität kernel.request mit einer höheren Priorität als den Listener Firewall registrieren.

Sie können das wie in der Symfony-Dokumentation beschrieben (Events and Event Listeners). Ihre Event Listener-Klasse in src/AppBundle/EventListener/YourListener.php erstellen:

namespace AppBundle\EventListener; 

use Symfony\Component\HttpKernel\Event\GetResponseEvent; 

class YourListener 
{ 
    public function onKernelRequest(GetResponseEvent $event) 
    { 
     // do stuff 
    } 
} 

Dann wird Ihr Dienst in Ihrem app/config/services.yml Datei registrieren:

services: 
    AppBundle\EventListener\YourListener: 
     tags: 
      - { name: kernel.event_listener, event: kernel.request, priority: 9 } 

Nach this page die Firewall eine Priorität von 8 hat also die Priorität Ihrer Event-Listener sollte höher sein als das, was vor dem Login ausgeführt wird (ich habe im obigen Beispiel 9 verwendet).

+0

Es kann mein Problem lösen, aber wie kann ich es zwingen, nur vor der Authentifizierung zu laufen? Jetzt läuft es in jeder Anfrage. – mikecpl

+0

Der 'Firewall'-Listener wird ebenfalls bei jeder Anfrage ausgeführt. Was genau versuchen Sie zu tun (d. H. Welche Aktionen möchten Sie vor dem Login ausführen)? –

+0

Ich protokolliere einige Aktionen über den nicht angemeldeten Benutzer mit Sitzungs-ID, und ich möchte diese Datensätze mit dem angemeldeten Benutzer ausfüllen, aber das Problem ist, dass die Sitzungs-ID nach der Authentifizierung geändert wird. – mikecpl