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

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