API Web com Laravel e PHP - Parte 2
Na parte 1, aprendemos como criar modelos, visualizações e controladores para uma API que lida com postagens de blog construídas com PHP e Laravel. Agora vamos nos concentrar em outra parte fundamental da construção de APIs: registro e autenticação do usuário.
Você aprenderá quais ferramentas o Laravel oferece e como usá-las para criar e gerenciar facilmente os tokens de autenticação, bem como usá-los para fornecer informações privadas apenas aos usuários que as possuem.
Este tutorial se baseará no código gerado durante a parte 1.
Cadastro de usuários
Criar um registro de usuário no Laravel é fácil se lidarmos com os componentes corretos. Felizmente, o Laravel já possui um pacote pré-instalado chamado Sanctum que facilita muito nosso trabalho, bem como um modelo User pré-configurado para lidar com tokens de autenticação.
Para criar um endpoint de cadastro, primeiro precisamos criar um novo controlador que lide com os usuários. Este comando a seguir criará o arquivo UserController.php:
sail artisan make:controller UserController --model=user --api
Também precisamos de um novo resource que nos permita criar uma representação JSON de um usuário para retornar via API:
sail artisan make:resource UserResource
No resource, faremos algo semelhante ao que fizemos na parte 1, mas agora com as propriedades id, email e username:
Dentro do controller UserController, vamos preencher o método store com tudo e validação de dados como aprendemos na parte 1. Com isso, o Laravel vai verificar se os emails são válidos e se não existe outro usuário com o mesmo email cadastrado anteriormente.
Observe como a senha é processada primeiro com bcrypt antes de ser armazenada. Isso evitará ter senhas de texto abertas no banco de dados, o que seria uma grande vulnerabilidade no sistema.
Por fim, adicionaremos o caminho de registro em api.php, apontando para o método store que acabamos de implementar.
Observe como o adicionamos sob o prefixo deusers, para que todas as nossas rotas de tratamento de usuários tenham a mesma estrutura de URL.
Com isso pronto, criaremos um usuário de teste a partir do console:
Você verá como a API retornará um JSON que representa o usuário que acabamos de criar.
Pronto. Já temos nosso endpoint de cadastro. Para a próxima etapa, certifique-se de criar pelo menos um usuário para poder testar sua autenticação.
Autenticação de usuários
Depois de registrar os usuários, precisamos de um endpoint adicional para fazer o processo de autenticação. Resumindo, precisamos de uma maneira para que os usuários nos forneçam seu e-mail e senha para retornar um token de autenticação se os detalhes de acesso fornecidos forem válidos. Esse token será usado em chamadas subsequentes para consultar informações que pertencem apenas a esse usuário.
Primeiro, precisamos criar um novo método em nosso UserController chamado login. Isso usará a fachada Auth para verificar se existe um usuário com essa combinação de e-mail e senha e, se existir, retornará um token de autenticação válido.
Adicionaremos uma nova rota ao prefixo dos usuários para poder chamar esse novo endpoint no api.php:
Agora sim, vamos tentar logar com o usuário que cadastramos no passo anterior:
Notaremos que a resposta nos dá um token como o seguinte:
É possível gerar mais de 1 token válido, pois devemos conseguir autenticar nosso usuário em mais de um dispositivo ao mesmo tempo.
Vamos salvar esse token para usar na próxima etapa.
Autorização com token
Agora, tentaremos criar um novo endpoint que requer um token válido para ser usado: faremos um que nos forneça os dados do usuário atualmente autenticado na API.
Precisaremos que esse endpoint falhe se não houver um token válido presente na solicitação e use esse mesmo token para obter o usuário correto. Felizmente, o Laravel Sanctum faz praticamente tudo automaticamente.
Primeiro, criaremos um novo método no UserController chamado me, que simplesmente consulta o usuário atual. A chamada para auth() verificará automaticamente o token recebido na solicitação para obter o usuário relevante.
Adicionaremos a nova rota ao api.php. Observe como agora usamos o middleware auth:sanctum para esta rota. Isso é importante, pois qualquer rota que declararmos dentro desse grupo usará de forma transparente os tokens de autenticação para validar o acesso.
Agora, vamos testar com o token que geramos no passo anterior. Observe como ele precisa ser enviado usando o cabeçalho Authorization como um token Bearer.
Funciona perfeitamente. Este é um exemplo de resposta que devemos esperar:
Tente criar novos usuários e novos tokens e chame esse endpoint com dados diferentes para que você possa ver como ele funciona e validar se ele falha quando o token que você envia é inválido.
Fechar sessão
Por fim, trabalharemos em um endpoint para remover a autenticação do usuário. Para sair, só precisamos deste endpoint para destruir os tokens criados anteriormente pelo Sanctum.
Começamos criando o novo método de logout no UserController:
Agora adicione sua rota ao api.php, também no middleware auth:sanctum:
Finalmente, ele tenta chamá-lo com um token válido.
Conclusão
Desta vez, aprendemos a criar diferentes endpoints para autenticação de usuários, o que nos permitiu criar tokens, usá-los para obter informações privadas e, finalmente, destruí-los para sair.
Na próxima parte, aprenderemos como usar esses mesmos tokens para gerenciar postagens de blog e como permitir que os autores modifiquem apenas os de sua propriedade.
A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.