2017-08-28 5 views
0

Wie können wir unseren Code ausführen, nachdem sich der Benutzer (erfolgreich) mit http_basic_ldap angemeldet hat?symfony 3.3 http_basic_ldap Ereignis für (erfolgreiche) Anmeldung?

http://symfony.com/doc/3.3/security/ldap.html#configuration-example-for-http-basic
(dickes Lob an Devs für die Herstellung von ldap Login so einfach!)

https://symfony.com/doc/3.3/components/security/authentication.html#authentication-events
Ich habe versucht, mit AuthenticationEvents::AUTHENTICATION_SUCCESS und SecurityEvents::INTERACTIVE_LOGIN aber entweder mein Code ist falsch, oder solche Ereignisse nicht für http_basic_ldap gebrannt.

mein Test src/AppBundle/EventSubscriber/LoginSubscriber.php:

namespace AppBundle\EventSubscriber; 

use Symfony\Component\EventDispatcher\EventSubscriberInterface; 
use Symfony\Component\Security\Core\AuthenticationEvents; 
use Symfony\Component\Security\Http\SecurityEvents; 

class LoginSubscriber implements EventSubscriberInterface 
{ 
    public function onUserLogin ($dunno) 
    { 
     file_put_contents("/tmp/dunno.log", "yay, got called!\n", FILE_APPEND); 
    } 

    public static function getSubscribedEvents() 
    { 
     return [ 
      AuthenticationEvents::AUTHENTICATION_SUCCESS => 'onUserLogin', 
      SecurityEvents::INTERACTIVE_LOGIN => 'onUserLogin', 
     ]; 
    } 
} 

ps. Mein Ziel ist es, die Benutzerrollen aus der Symfony Datenbank/Entity zu laden (aber immer über ldap einloggen).

Antwort

0

Der obige Code funktioniert für http_basic_ldap!
(und es scheint auch bei beiden Veranstaltungen nur einmal nach dem Login)

das Problem war, dass debian9 hat jetzt PrivateTmp=true für apache2 Service, das Schreiben so zu /tmp/dunno.log mit PHP durch apache2 nicht zu /tmp/dunno.log schreiben, aber zu /tmp/some-long-random-string/tmp/dunno.log ...

, da dies unsere (virtuelle) dev Maschine, nicht ich kümmere sich um solche Dinge, so heren, wie das deaktivieren:

sudo -i 
cat <<- 'EOF' > /etc/systemd/system/apache2.service.d/override.conf 
[Service] 
PrivateTmp=false 
EOF 
systemctl daemon-reload 
systemctl restart apache2 

ps. Ich könnte Ausreden wie „i nicht einmal die Funktion PrivateTmp wusste existierte“, oder „wenn die Verzeichnisnamen apache2.service-systemd-private-c23fc69cc5ae4f89bcf2e1317081f152-ZfVyIg statt systemd-private-c23fc69cc5ae4f89bcf2e1317081f152-apache2.service-ZfVyIg war ich wahrscheinlich hätte es leichter entdeckt“ ...

Verwandte Themen