Is er een soort van "pre-login" -gebeurtenis of iets dergelijks?

Ik moet wat code uitvoeren voordat ik ga controleren of de referenties van een gebruiker correct zijn. Momenteel bereik ik dit met een aangepaste gebeurtenislistener die de kernel.request -gebeurtenis afvuurt en controleert of de gevraagde URL overeenkomt met de instelling check_path van security.yml. Maar dit is inefficiënt omdat het op elk verzoek werkt. Ik ben op de hoogte van de onSecurityInteractiveLogin -gebeurtenis, maar ik geloof dat die vuurt na een succesvolle inlogpoging. Weet iemand of er een pre-login-evenement is of waar ik zelf een aangepast evenement kan verzenden?

10

1 antwoord

Er is dus geen 'officiële' pre-login-gebeurtenis. Maar gelukkig is het niet moeilijk om er een in te stellen, omdat Symfony2 zo uitbreidbaar is. De kunst is om uw eigen service te gebruiken voor verificatie.

Symfony gebruikt deze klasse wanneer een aanmeldingsformulier wordt gebruikt:

Symfony \ Component \ Security \ Http \ Firewall \ UsernamePasswordFormAuthenticationListener

Als u de parameter security.authentication.listener.form.class (oorspronkelijk gedefinieerd in Symfony \ Bundle \ SecurityBundle \ Resources \ config \ security_listeners.xml ) overschrijft, kunt u een aangepaste luisteraar die UsernamePasswordFormAuthenticationListener uitbreidt.

U hoeft alleen nog de methode attemptAuthentication() te negeren om de aangepaste gebeurtenis te verzenden.

(Eigenlijk moet u de gebeurtenisverdeler ook opslaan als een klasse-eigenschap in __ construct() )

Deze methode zou moeten werken met andere authenticatiemethoden - alles wat je zou moeten doen is de juiste listener aanpassen (bijv. BasicAuthenticationListener , X509AuthenticationListener , etc.)

12
toegevoegd
kan je alsjeblieft een voorbeeld geven omdat ik niet weet waar ik moet beginnen.
toegevoegd de auteur pregmatch, de bron
Ik heb deze suggestie geïmplementeerd met de volgende stappen: 1) voeg een regel toe "security.authentication.listener.form.class: App \ BoardBundle \ Listener \ MyAuthListener" in je config.yml, parameter sectie 2) maak deze class class in feite MyAuthListener breidt UsernamePasswordFormAuthenticationListener uit {3) Maak hierin een beschermde functiepogingAuthenticatie (Verzoek $ aanvraag)
toegevoegd de auteur user1312695, de bron