<?php
namespace App\EventListener;
use App\Entity\Monolith\User;
use App\Repository\UserRepository;
use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTDecodedEvent;
class JWTDecodedListener
{
private UserRepository $userRepository;
public function __construct(UserRepository $userRepository)
{
$this->userRepository = $userRepository;
}
public function onJWTDecoded(JWTDecodedEvent $event): void
{
$payload = $event->getPayload();
$user = $this->userRepository->findOneBy(['email' => $payload['email']]);
if (!$this->isPayloadAndPasswordValid($payload, $user)) {
$event->markAsInvalid();
}
}
private function isPayloadAndPasswordValid(array $payload, ?User $user): bool
{
$password = $user?->getPassword();
if (!$password || !isset($payload['hash'])) {
return false;
}
return sha1($password) === $payload['hash'];
}
}