A autenticação com tokens em uma API RESTful é um método seguro e eficiente para garantir que os usuários autenticados tenham acesso a recursos específicos em seu aplicativo Laravel. O Laravel oferece suporte nativo à autenticação por tokens, permitindo que você implemente esse mecanismo rapidamente em sua API.

Aqui estão os passos para configurar a autenticação com tokens em uma API RESTful usando Laravel, juntamente com exemplos:

Passo 1: Configuração do projeto Laravel Certifique-se de ter um projeto Laravel existente configurado para criar uma API RESTful. Caso não tenha, você pode criar um novo projeto executando o seguinte comando:

composer create-project --prefer-dist laravel/laravel nome-do-projeto
cd nome-do-projeto

Passo 2: Configuração do banco de dados Verifique se você tem um banco de dados configurado em seu arquivo .env e execute as migrações para criar a tabela de usuários usando o seguinte comando:

php artisan migrate

Passo 3: Criação do Controller para Autenticação Vamos criar um Controller para lidar com a autenticação. Execute o seguinte comando para gerar o Controller:

php artisan make:controller AuthController

Passo 4: Implementação da Autenticação por Tokens Abra o arquivo AuthController.php criado anteriormente em app/Http/Controllers/AuthController.php e implemente os métodos necessários para autenticação por tokens. Vamos usar tokens JWT (JSON Web Tokens) para isso. Certifique-se de que você tenha o pacote tymon/jwt-auth instalado em seu projeto.

composer require tymon/jwt-auth
php artisan vendor:publish --provider="Tymon\\\\JWTAuth\\\\Providers\\\\LaravelServiceProvider"
php artisan jwt:secret
<?php

namespace App\\\\Http\\\\Controllers;

use Illuminate\\\\Http\\\\Request;
use Illuminate\\\\Support\\\\Facades\\\\Auth;
use App\\\\Models\\\\User;

class AuthController extends Controller
{
    // Registro de usuário
    public function register(Request $request)
    {
        $this->validate($request, [
            'name' => 'required|string',
            'email' => 'required|string|email|unique:users',
            'password' => 'required|string|min:6',
        ]);

        $user = new User([
            'name' => $request->name,
            'email' => $request->email,
            'password' => bcrypt($request->password),
        ]);

        $user->save();

        return response()->json(['message' => 'Usuário registrado com sucesso!'], 201);
    }

    // Autenticação e geração do token
    public function login(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|string|email',
            'password' => 'required|string',
        ]);

        $credentials = $request->only('email', 'password');

        if (!Auth::attempt($credentials)) {
            return response()->json(['message' => 'Credenciais inválidas'], 401);
        }

        $user = Auth::user();
        $token = $user->createToken('MyApp')->accessToken;

        return response()->json(['token' => $token], 200);
    }

    // Logout (invalidação do token)
    public function logout(Request $request)
    {
        $request->user()->token()->revoke();
        return response()->json(['message' => 'Logout realizado com sucesso!'], 200);
    }
}

Passo 5: Configuração das Rotas Agora, vamos configurar as rotas em routes/api.php para acessar os métodos do AuthController:

<?php

use Illuminate\\\\Http\\\\Request;
use Illuminate\\\\Support\\\\Facades\\\\Route;
use App\\\\Http\\\\Controllers\\\\AuthController;

Route::post('register', [AuthController::class, 'register']);
Route::post('login', [AuthController::class, 'login']);

Route::group(['middleware' => 'auth:api'], function () {
    // Rotas protegidas que exigem autenticação por token
    Route::post('logout', [AuthController::class, 'logout']);
});

Testando a autenticação Agora, você pode usar ferramentas como o Postman ou o Insomnia para testar a autenticação com tokens.

  1. Faça uma requisição POST para /api/register para criar um novo usuário, enviando um JSON com os dados de registro do usuário.

  2. Faça uma requisição POST para /api/login com as credenciais do usuário para obter o token.

  3. Use o token recebido nas requisições para rotas protegidas, incluindo-o no cabeçalho da requisição:

    Authorization: Bearer {seu-token-aqui}
    
  4. Para fazer logout, faça uma requisição POST para /api/logout com o token no cabeçalho.