<?php
namespace App\EventListener;
use Lexik\Bundle\JWTAuthenticationBundle\Encoder\JWTEncoderInterface;
use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
use Lexik\Bundle\JWTAuthenticationBundle\Exception\JWTDecodeFailureException;
use Symfony\Component\Security\Core\User\UserInterface;
class AuthenticationSuccessListener
{
/**
* @var JWTEncoderInterface
*/
private $JWTEncoder;
public function __construct(JWTEncoderInterface $JWTEncoder)
{
$this->JWTEncoder = $JWTEncoder;
}
public function onAuthenticationSuccessResponse(AuthenticationSuccessEvent $event)
{
$data = $event->getData();
$user = $event->getUser();
if(!$user instanceof UserInterface) {
return;
}
$exp = null;
try {
$exp = $this->JWTEncoder->decode($event->getData()['token']);
} catch (JWTDecodeFailureException $e) {
}
$data['data'] = array(
'roles' => $user->getRoles(),
'userId' => $user->getId(),
'exp' => $exp['exp'],
'fullName' => $user->getFullName(),
'email' => $user->getUsername()
);
$event->setData($data);
}
}