Tutorial Implementação de autenticação com JWT no Laravel
Implementar um sistema de autenticação robusto é essencial em qualquer aplicação web, e o uso de JWT é uma das melhores opções. Neste tutorial, iremos explorar como implementar um sistema de autenticação JWT em uma aplicação Laravel passo a passo, desde a instalação até a autenticação de usuários. Com as instruções detalhadas e código exemplo, você poderá implementar facilmente esse recurso em sua própria aplicação Laravel.
Passo 1: Instalando o JWT no Laravel
Primeiro, precisamos instalar o pacote JWT no Laravel usando o Composer. Abra seu terminal e navegue até a raiz do projeto e digite o seguinte comando:
composer require tymon/jwt-auth
Aguarde alguns segundos para que o Composer baixe e instale o pacote JWT.
Passo 2: Configurando o JWT no Laravel
Após a instalação do pacote JWT, agora precisamos publicar suas configurações no Laravel. Para fazer isso, execute o seguinte comando no terminal:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
Após rodar este comando, uma nova pasta será criada em config/jwt.php
, que contém todas as configurações do pacote JWT.
Passo 3: Configurando o Model User no Laravel
Em seguida, precisamos configurar o model User do Laravel para trabalhar com o pacote JWT. Para isso, abra o arquivo app/Providers/AuthServiceProvider.php
e adicione o seguinte método no final da classe:
public function boot()
{
$this->registerPolicies();
\JWTAuth::viaRequest('api', function ($request) {
return $request->user();
});
}
Isso configura o método de autenticação para utilizar o token JWT.
Passo 4: Configurando o Controller de Autenticação no Laravel
Agora precisamos criar um Controller para lidar com a autenticação dos usuários. Digite o seguinte comando no terminal:
php artisan make:controller AuthController
Abra o arquivo app/Http/Controllers/AuthController.php
e adicione os seguintes métodos:
use Tymon\JWTAuth\Facades\JWTAuth;
class AuthController extends Controller
{
public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password');
if (!$token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return response()->json(['token' => $token]);
}
public function getAuthenticatedUser()
{
try {
if (! $user = JWTAuth::parseToken()->authenticate()) {
return response()->json(['user_not_found'], 404);
}
} catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
return response()->json(['token_expired'], $e->getStatusCode());
} catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
return response()->json(['token_invalid'], $e->getStatusCode());
} catch (Tymon\JWTAuth\Exceptions\JWTException $e) {
return response()->json(['token_absent'], $e->getStatusCode());
}
return response()->json(compact('user'));
}
}
O método authenticate
faz a autenticação do usuário e retorna o token JWT. Já o método getAuthenticatedUser
verifica se o token é válido e retorna o usuário autenticado.
Passo 5: Criando as Rotas no Laravel
Por fim, precisamos criar as rotas para acessar os métodos criados no controller de autenticação.
Para criar a rota de login, adicione o seguinte código ao arquivo de rotas (routes/api.php):
Route::post('login', 'AuthController@login');
Em seguida, crie o controlador de autenticação (app/Http/Controllers/AuthController.php) e adicione o seguinte código:
php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
class AuthController extends Controller
{
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (!$token = auth()->attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return response()->json(['token' => $token]);
}
}
Este controlador receberá a solicitação de login do usuário e retornará um token JWT válido caso as credenciais fornecidas sejam autenticadas com sucesso.
Passo 6: Proteja as rotas autenticadas.
Agora que você tem um sistema de autenticação funcional, você pode proteger as rotas que exigem autenticação. Para fazer isso, adicione o seguinte código ao arquivo de rotas (routes/api.php):
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
Este trecho de código protege a rota '/user' e permite que somente usuários autenticados acessem.
Esses são os passos finais para implementar um sistema de autenticação robusto com JWT em uma aplicação Laravel. Lembre-se de que este é apenas um exemplo básico e que você pode adaptá-lo e personalizá-lo de acordo com suas necessidades específicas.
Parabéns! Agora você sabe como implementar um sistema de autenticação robusto com JWT em uma aplicação Laravel. Esse é um recurso essencial para qualquer aplicação moderna que precise de autenticação de usuários. Com o JWT, você pode criar tokens que são válidos por um tempo limitado e que podem ser usados para proteger suas rotas de API. Espero que este tutorial tenha sido útil para você. Se tiver alguma dúvida, deixe um comentário abaixo.
Qual é a sua reação?