Ergebnis 1 bis 10 von 10

Thema: Wie definiere ich den Listener für "SecurityEvents::INTERACTIVE_LOGIN" Event

  1. #1
    Contao-Nutzer
    Registriert seit
    28.11.2018.
    Beiträge
    65

    Standard Wie definiere ich den Listener für "SecurityEvents::INTERACTIVE_LOGIN" Event

    Ich bin grade dabei ein Modul Contao 5 kompatibel zu machen und da der postLogin Hook deprecated ist und in der Documentation steht, dass man das SecurityEvents::INTERACTIVE_LOGIN Event benutzen soll versuche ich den Listener dafür zu schreiben. Allerdings bin ich mir nicht sicher wie ich den Anlegen soll und ich finde in der Documentation nirgends ein Beispiel dafür.
    PHP-Code:
    namespace CustomDesign\SiteBundle\EventListener;

    use 
    Symfony\Component\EventDispatcher\Attribute\AsEventListener;
    use 
    Symfony\Component\EventDispatcher\Event;
    use 
    Contao\User;



    #[AsEventListener(SecurityEvents::INTERACTIVE_LOGIN)]

    class LoginListener
    {


        public function 
    __invoke(User $user): void
        
    {

        }

    Zudem habe ich hier https://pdir.de/news/was-ist-neu-in-contao-5-0.html gelesen, dass ich das LoginSuccessEvent benutzen soll.
    Wie gesagt ich weiß nicht wie ich den Listener anlegen muss bzw ob das überhaupt das richtige Event ist oder welche imports ich brauche.

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.162
    Partner-ID
    10107

    Standard

    Wie du einen EventListener implementierst ist grundsätzlich hier beschrieben: https://symfony.com/doc/current/even...event-listener
    » sponsor me via GitHub or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    28.11.2018.
    Beiträge
    65

    Standard

    Ich mache offensichtlich immernoch etwas falsch.
    Ich habe es als Service
    service.yml
    Code:
    services:
        CustomDesign\SiteBundle\EventListener\LoginListenerService:
            tags: [kernel.event_listener]
    <-- hier habe ich auch
    Code:
     tags: [security.event_listener]
    probiert weil es ja ein security Event ist. Aber wie gesagt bin ich unsicher was ich hier überhaupt verwenden soll.
    LoginListenerService.php
    PHP-Code:
    namespace CustomDesign\SiteBundle\EventListener;

    use 
    Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
    use 
    Contao\User;

    class 
    LoginListenerService
    {


        public function 
    __invoke(User $user): void
        
    {

        }

    und mit dem PHP Attribute probiert
    PHP-Code:
    namespace CustomDesign\SiteBundle\EventListener;

    use 
    Contao\User;
    use 
    Symfony\Component\EventDispatcher\Attribute\AsEventListener;

    #[AsEventListener(event: 'LoginSuccessEvent')]
    class LoginListener
    {


        public function 
    __invoke(User $user): void
        
    {

        }

    Aber beide werden nicht aufgerufen.

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.162
    Partner-ID
    10107

    Standard

    Am einfachsten ist es wenn du autowiring und autoconfiguration benutzt und dann das PHP Attribut. Da musst du das Event auch dann gar nicht mehr dediziert angeben sondern das richtige Event wird anhand des Parameters deiner Funktion ermittelt.

    Momentan hast du dort übrigens den falschen Parameter angegeben. Das was an deine Funktion übergeben werden würde, ist das Event Objekt, nicht die User Instanz.
    » sponsor me via GitHub or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    28.11.2018.
    Beiträge
    65

    Standard

    Das Attribut mit dem Event
    PHP-Code:
    #[AsEventListener(event: 'LoginSuccessEvent')] 
    ist also potentiell richtig?

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.162
    Partner-ID
    10107

    Standard

    Nein, der Name ist falsch. Entferne den Namen und berichtige das Argument des Listeners.

    Ich bin noch unterwegs, daher kann ich momentan nicht den ganzen Code posten
    » sponsor me via GitHub or Revolut

  7. #7
    Contao-Nutzer
    Registriert seit
    28.11.2018.
    Beiträge
    65

    Standard

    PHP-Code:
    #[AsEventListener(event: 'security.interactive_login')] 
    funktioniert! Danke!

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.162
    Partner-ID
    10107

    Standard

    Was ich meinte:
    PHP-Code:
    // src/EventListener/LoginSuccessListener.php
    namespace App\EventListener;

    use 
    Symfony\Component\EventDispatcher\Attribute\AsEventListener;
    use 
    Symfony\Component\Security\Http\Event\LoginSuccessEvent;

    #[AsEventListener]
    class LoginSuccessListener
    {
        public function 
    __invoke(LoginSuccessEvent $event): void
        
    {
            
    // …
        
    }

    Geändert von Spooky (31.01.2025 um 18:12 Uhr)
    » sponsor me via GitHub or Revolut

  9. #9
    Wandelndes Contao-Lexikon Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    10.185
    User beschenken
    Wunschliste

    Standard

    bei mir gabs da eine Fehlermeldung - damit ging es bei mir


    PHP-Code:
    use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;

    class 
    LoginSuccessListener
    {
        public function 
    __invoke(InteractiveLoginEvent $event): void
        
    {
            
    $request $event->getRequest();
    // ... 
    und
    PHP-Code:
      AppBundle\EventListener\LoginSuccessListener:
        public: 
    true
        tags
    :
          - { 
    namekernel.event_listenereventsecurity.interactive_login 

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.162
    Partner-ID
    10107

    Standard

    Folgendes sollte reichen:
    PHP-Code:
    // src/EventListener/InteractiveLoginEventListener.php
    namespace App\EventListener;

    use 
    Symfony\Component\EventDispatcher\Attribute\AsEventListener;
    use 
    Symfony\Component\Security\Http\Event\InteractiveLoginEvent;

    #[AsEventListener]
    class InteractiveLoginEventListener
    {
        public function 
    __invoke(InteractiveLoginEvent $event): void
        
    {
            
    // …
        
    }

    » sponsor me via GitHub or Revolut

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •