Executei a configuração da proteção de rota seguindo o passo a passo da aula. Mas sempre que tento fazer alguma modificação. Recebo a mensagem de falha na autenticação. A geração do token está acontecendo com sucesso.
{
"usuario": "usuario",
"senha": "123456"
}
Recebo
{
"acess_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InVzdWFyaW8ifQ.Yytcv05WKMtD5T4-saEgpZxICv7Vhp6uCnfeP_N2Uew"
}
Não sei se pode ter relação, mas ao comparar o UserFixtures que eu fiz com o modelo da aula achei a seguinte diferença: Modelo da Aula A classe ObjectManager está definida como
interface ObjectManager extends ObjectManager \Doctrine\Common\Persistence\ObjectManager
No entanto para mim esta opção apresenta erro, O PhpStorm sinaliza a mensagem:
Declaration must be compatible with FixtureInterface->load(manager: \Doctrine\Persistence\ObjectManager)
A opção que utilizei foi selecionar o ObjectManager do tipo:
interface ObjectManager \Doctrine\Persistence\ObjectManager
A mesma coisa ocorre para o AppFixture.
Vou postar abaixo como está o User e o App Fixture:
namespace App\DataFixtures;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
class UserFixtures extends Fixture
{
public function load(ObjectManager $manager)
{
$user= new \App\Entity\User() ;
$user ->setUsername ('usuario')
->setPassword('$argon2i$v=19$m=65536,t=4,p=1$RFkyZ1VoMDJOYmVMdzh1ZA$5VA+o/XveQIzZq3uxhHrhxhwK3oLxOkAQ2TNHrWPi5k');
$manager->persist($user);
$manager->flush();
}
}
AppFixture:
namespace App\DataFixtures;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
class AppFixtures extends Fixture
{
public function load(ObjectManager $manager)
{
// $product = new Product();
// $manager->persist($product);
$manager->flush();
}
}
Agora o JwtAutenticador:
class JwtAutenticador extends AbstractGuardAuthenticator
{
/**
* @var UserRepository
*/
private $repository;
public function __construct(UserRepository $repository)
{
$this->repository = $repository;
}
public function start(Request $request, AuthenticationException $authException = null)
{
// TODO: Implement start() method.
}
public function supports(Request $request) #ctrl+p
{
return $request->getPathInfo() !== '/login';
}
public function getCredentials(Request $request)
{
$token= str_replace(
'Bearer',
'',
$request->headers->get('Authorization')
);
try {
return JWT::decode($token,'chave',['HS256']) ;
} catch (\Exception $e){
return false;
}
}
public function getUser($credentials, UserProviderInterface $userProvider)
{
if(!is_object($credentials) || !property_exists($credentials,'username')){
return null;
}
$username= $credentials->username;
return $this->repository->findOneBy(['username'=>$username]);
}
public function checkCredentials($credentials, UserInterface $user)
{
return is_object($credentials) && property_exists($credentials,'username');
}
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
return new JsonResponse([
'erro'=> 'Falha na Autenticação'
],Response::HTTP_UNAUTHORIZED );
}
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
return null;
}
public function supportsRememberMe()
{
return false;
}
}