Poprawne wiadomości podczas błędnego logowania na Twojej stronie www

Standardowo niezależnie od tego czy użytkownik nie istnieje, wprowadziliśmy złe hasło lub jest zablokowany wiadomość zwrotna na stronie internetowej stworzonej w oparciu o FOSUserBundle (Symfony) zawsze wygląda tak samo:

{
   "code": 401,
   "message": "Bad credentials"
}

W łatwy sposób można uzyskać dokładną wiadomość jaki błąd wystąpił, wystarczy zarejestrować prosty subscriber który do odpowiedzi wprowadzi wiadomość z pierwszego wyjątku który wystąpił (Pierwszy wyjątek prawdopodobnie pochodzi FosUser’a i zawiera pierwszy błąd walidacji użytkownika który zawiera wiadomość o dokładnym błędzie)

<?php 
namespace App\Event\Subscriber;

use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationFailureEvent;
use Lexik\Bundle\JWTAuthenticationBundle\Events;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class AuthenticationFailureSubscriber implements EventSubscriberInterface {
   public static function getSubscribedEvents()
   {
      return [
         Events::AUTHENTICATION_FAILURE => 'onAuthenticationFailure'
      ];
   }
   public function onAuthenticationFailure(AuthenticationFailureEvent $event)
   {
      $firstEvent = $event->getException();
      while($firstEvent->getPrevious()) {
         $firstEvent = $firstEvent->getPrevious();
      }
      $response = $event->getResponse();
      $response->setMessage($firstEvent->getMessage());
      $event->setResponse($response);  
   } 
}

Dzięki temu dostajemy zwrotki typu:

{
   "code": 401,
   "message": "The presented password is invalid."
}
{
   "code": 401,
   "message": "User account is disabled."
}
{
   "code": 401,
   "message": "Username \"admin\" does not exist." 
}

Udostępnij

Zarezerwuj spotkanie icon Zarezerwuj spotkanie