<h2>Entendendo Laravel Breeze e Sanctum</h2>
<p>Laravel Breeze é um kit de autenticação minimalista que fornece uma implementação rápida de login, registro e recuperação de senha. Sanctum, por sua vez, é um sistema de autenticação de API que permite criar tokens pessoais ou usar autenticação baseada em sessão para SPAs (Single Page Applications). Embora sejam ferramentas diferentes, frequentemente trabalham juntas: Breeze para a interface web tradicional e Sanctum para proteger APIs.</p>
<p>A principal diferença entre eles é que Breeze usa sessões HTTP (padrão web), enquanto Sanctum usa tokens Bearer para autenticação de API. Para um novo desenvolvedor, compreender quando usar cada uma é fundamental. Se você constrói um Laravel tradicional com Blade, Breeze é suficiente. Se precisa de uma API RESTful ou uma SPA desacoplada, Sanctum entra em cena.</p>
<h3>Instalação e Setup Inicial</h3>
<p>Para instalar o Breeze, execute o comando abaixo em um projeto Laravel 10+:</p>
<pre><code class="language-bash">composer require laravel/breeze --dev
php artisan breeze:install</code></pre>
<p>Escolha a stack desejada (Blade, React, Vue ou Inertia). Após isso, instale as dependências e execute as migrations:</p>
<pre><code class="language-bash">npm install
npm run dev
php artisan migrate</code></pre>
<p>Para Sanctum, a instalação é igualmente simples:</p>
<pre><code class="language-bash">composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate</code></pre>
<h2>Autenticação com Breeze: Fluxo Completo</h2>
<p>Breeze oferece um fluxo completo de autenticação pronto para produção. Ao instalar, você recebe rotas de login, registro e confirmação de email já configuradas. O Breeze usa o guard padrão do Laravel com sessões, armazenando a identidade do usuário em cookies seguros.</p>
<p>Quando um usuário faz login, o Laravel cria uma sessão autenticada. Nas requisições subsequentes, o middleware <code>auth</code> valida automaticamente se o usuário possui uma sessão válida. Para proteger rotas, use o middleware:</p>
<pre><code class="language-php">// routes/web.php
Route::middleware('auth')->group(function () {
Route::get('/dashboard', function () {
return view('dashboard');
})->name('dashboard');
Route::post('/logout', [AuthenticatedSessionController::class, 'destroy'])->name('logout');
});</code></pre>
<p>O controller de login já vem implementado. Você pode personalizá-lo conforme necessário, mas a configuração padrão funciona sem modificações. Breeze também inclui autenticação de dois fatores (2FA) se você instalá-lo com a opção correspondente durante o setup.</p>
<h2>Protegendo APIs com Sanctum</h2>
<p>Sanctum permite criar APIs seguras usando tokens Bearer. Diferente de sessões, tokens são stateless e ideais para aplicações distribuídas ou SPAs. Cada usuário pode ter múltiplos tokens, útil para diferentes clientes (web, mobile, desktop).</p>
<h3>Criando Tokens Pessoais</h3>
<p>A maneira mais simples de usar Sanctum é criar tokens pessoais. O usuário gera um token única vez e o utiliza em subsequentes requisições:</p>
<pre><code class="language-php">// Criar token para um usuário
$user = User::find(1);
$token = $user->createToken('API Token')->plainTextToken;
// Retornar token ao cliente
return response()->json(['token' => $token]);</code></pre>
<p>O cliente armazena esse token e o envia em cada requisição:</p>
<pre><code class="language-javascript">// JavaScript / Axios
axios.defaults.headers.common['Authorization'] = Bearer ${token};
axios.get('/api/user').then(response => {
console.log(response.data);
});</code></pre>
<h3>Protegendo Rotas de API</h3>
<p>Configure suas rotas de API para usar o guard <code>sanctum</code>:</p>
<pre><code class="language-php">// routes/api.php
Route::middleware('auth:sanctum')->group(function () {
Route::get('/user', function (Request $request) {
return $request->user();
});
Route::post('/logout', function (Request $request) {
$request->user()->currentAccessToken()->delete();
return response()->json(['message' => 'Logged out']);
});
});</code></pre>
<p>O middleware <code>auth:sanctum</code> valida o token Bearer enviado na requisição. Se inválido ou expirado, retorna erro 401.</p>
<h2>Usando Breeze com Sanctum em uma SPA</h2>
<p>Para uma Single Page Application com Sanctum, o Breeze pode ser configurado com Inertia.js, fornecendo autenticação web com suporte a token. Neste cenário, a SPA roda no mesmo domínio do Laravel, permitindo usar tanto sessões quanto tokens.</p>
<pre><code class="language-php">// User.php - Model com método para criar API tokens
namespace App\Models;
use Laravel\Sanctum\HasApiTokens;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable {
use HasApiTokens;
protected $fillable = ['name', 'email', 'password'];
}</code></pre>
<p>No frontend (React/Vue), após autenticação via Breeze, solicite um token Sanctum:</p>
<pre><code class="language-javascript">// Após login bem-sucedido
const response = await fetch('/api/tokens/create', {
method: 'POST',
credentials: 'include'
});
const { token } = await response.json();
localStorage.setItem('api_token', token);</code></pre>
<p>Isso permite que sua SPA consuma a própria API com segurança, combinando o melhor dos dois mundos: autenticação web tradicional e APIs robustas.</p>
<h2>Conclusão</h2>
<p>Você aprendeu que <strong>Breeze é ideal para autenticação web tradicional com sessões</strong>, fornecendo um ponto de partida rápido e seguro. <strong>Sanctum complementa o ecossistema permitindo proteger APIs com tokens Bearer</strong>, sendo essencial para arquiteturas modernas com SPAs ou aplicações mobile. Por fim, <strong>ambas as ferramentas podem trabalhar juntas</strong> em um único projeto, oferecendo flexibilidade para diferentes tipos de cliente e requisição. Comece com Breeze se for apenas web, adicione Sanctum quando precisar de uma API.</p>
<h2>Referências</h2>
<ul>
<li><a href="https://laravel.com/docs/11/starter-kits#breeze" target="_blank" rel="noopener noreferrer">Laravel Breeze - Documentação Oficial</a></li>
<li><a href="https://laravel.com/docs/11/sanctum" target="_blank" rel="noopener noreferrer">Laravel Sanctum - Documentação Oficial</a></li>
<li><a href="https://laravel.com/docs/11/authentication" target="_blank" rel="noopener noreferrer">Authentication in Modern Laravel Applications - Official Guide</a></li>
<li><a href="https://inertiajs.com/" target="_blank" rel="noopener noreferrer">Building SPAs with Laravel and Inertia.js</a></li>
<li><a href="https://owasp.org/www-project-api-security/" target="_blank" rel="noopener noreferrer">API Token Authentication Best Practices</a></li>
</ul>