Spec Backend Com Php E Laravel • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 09.1 — Geração de Personal Access Tokens com createToken()

Contexto: Geração de Personal Access Tokens com createToken() no contexto de Autenticação de API com Laravel Sanctum.

Requisitos de Execução:

  1. Configurar trait HasApiTokens no model User e emitir token no login.

Resultado Esperado

Token de texto puro retornado com hash SHA-256 gravado na tabela `personal_access_tokens`.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_1_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Autenticação de API com Laravel Sanctum
🔑 Gabarito de Código & Solução Comentada
<?php
// app/Http/Controllers/Api/AuthController.php
namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Hash;

class AuthController extends Controller
{
    public function login(Request $request)
    {
        $user = User::where('email', $request->email)->first();
        if (!$user || !Hash::check($request->password, $user->password)) {
            return response()->json(['erro' => 'Credenciais inválidas'], 401);
        }
        $token = $user->createToken('api-token')->plainTextToken;
        return response()->json(['token' => $token, 'token_type' => 'Bearer']);
    }
}

🔍 Nível 2: Prática

Problema 09.2 — Proteção de Rotas com Middleware auth:sanctum

Contexto: Proteção de Rotas com Middleware auth:sanctum no contexto de Autenticação de API com Laravel Sanctum.

Requisitos de Execução:

  1. Proteger grupo de rotas com Route::middleware('auth:sanctum')->group(...).

Resultado Esperado

Acesso autorizado apenas para requisições contendo Bearer Token válido.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_2_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Autenticação de API com Laravel Sanctum
🔑 Gabarito de Código & Solução Comentada
<?php
// routes/api.php
Route::middleware('auth:sanctum')->group(function () {
    Route::get('/user', function (Request $request) {
        return $request->user();
    });
    Route::post('/logout', [AuthController::class, 'logout']);
});

⚡ Nível 3: Integração

Problema 09.3 — Habilidades e Escopos de Token com tokenCan()

Contexto: Habilidades e Escopos de Token com tokenCan() no contexto de Autenticação de API com Laravel Sanctum.

Requisitos de Execução:

  1. Emitir token com permissões restritas createToken('app', ['produtos:read', 'produtos:write']) e validar com tokenCan().

Resultado Esperado

Habilidade 'produtos:write' verificada no controller.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_3_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Autenticação de API com Laravel Sanctum
🔑 Gabarito de Código & Solução Comentada
<?php
// app/Http/Controllers/Api/ProdutoController.php
public function store(Request $request)
{
    if (!$request->user()->tokenCan('produtos:write')) {
        return response()->json(['erro' => 'Token sem permissão de escrita'], 403);
    }
    return response()->json(['status' => 'Criado'], 201);
}

🏆 Nível 4: Desafio Corporativo

Problema 09.4 — Revogação e Expiração Automática de Tokens

Contexto: Revogação e Expiração Automática de Tokens no contexto de Autenticação de API com Laravel Sanctum.

Requisitos de Execução:

  1. Configurar expiração de token em config/sanctum.php e implementar revogação com $user->tokens()->delete().

Resultado Esperado

Todos os tokens ativos do usuário revogados no logout de todos os dispositivos.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_4_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Autenticação de API com Laravel Sanctum
🔑 Gabarito de Código & Solução Comentada
<?php
// Revogar tokens
public function logoutTodosDispositivos(Request $request)
{
    $request->user()->tokens()->delete();
    return response()->json(['mensagem' => 'Todos os acessos foram revogados']);
}