<?php namespace BiiG\SecurityTest; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; use Symfony\Component\Security\Http\Firewall\ListenerInterface; /** * Class CustomAuthenticationListener * @package BiiG\SecurityTest * * Son job: transformer la request en token non authentifié puis l'authentifier avec le authenticationManager */ class CustomAuthenticationListener implements ListenerInterface { /** * @var TokenStorageInterface */ private $tokenStorage; /** * @var AuthenticationManagerInterface */ private $authenticationManager; /** * @var string Uniquely identifies the secured area */ private $providerKey; /** * CustomAuthenticationListener constructor. * @param TokenStorageInterface $tokenStorage * @param AuthenticationManagerInterface $authenticationManager * @param string $providerKey */ public function __construct( TokenStorageInterface $tokenStorage, AuthenticationManagerInterface $authenticationManager, $providerKey ) { $this->tokenStorage = $tokenStorage; $this->authenticationManager = $authenticationManager; $this->providerKey = $providerKey; } public function handle(GetResponseEvent $event) { $request = $event->getRequest(); $username = $request->query->get('username', ''); $password = $request->query->get('password', ''); $unauthenticatedToken = new UsernamePasswordToken( $username, $password, $this->providerKey ); $authenticatedToken = $this ->authenticationManager ->authenticate($unauthenticatedToken); $this->tokenStorage->setToken($authenticatedToken); } }