PHP

Laravel Authentication com Breeze e Sanctum na Prática

7 min de leitura

Laravel Authentication com Breeze e Sanctum na Prática

Entendendo Laravel Breeze e Sanctum 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. 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. Instalação e Setup Inicial Para instalar o Breeze, execute o comando abaixo em um projeto Laravel 10+: Escolha a stack desejada (Blade, React, Vue ou Inertia). Após isso, instale as dependências e

<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=&quot;Laravel\Sanctum\SanctumServiceProvider&quot;

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(&#039;auth&#039;)-&gt;group(function () {

Route::get(&#039;/dashboard&#039;, function () {

return view(&#039;dashboard&#039;);

})-&gt;name(&#039;dashboard&#039;);

Route::post(&#039;/logout&#039;, [AuthenticatedSessionController::class, &#039;destroy&#039;])-&gt;name(&#039;logout&#039;);

});</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-&gt;createToken(&#039;API Token&#039;)-&gt;plainTextToken;

// Retornar token ao cliente

return response()-&gt;json([&#039;token&#039; =&gt; $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[&#039;Authorization&#039;] = Bearer ${token};

axios.get(&#039;/api/user&#039;).then(response =&gt; {

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(&#039;auth:sanctum&#039;)-&gt;group(function () {

Route::get(&#039;/user&#039;, function (Request $request) {

return $request-&gt;user();

});

Route::post(&#039;/logout&#039;, function (Request $request) {

$request-&gt;user()-&gt;currentAccessToken()-&gt;delete();

return response()-&gt;json([&#039;message&#039; =&gt; &#039;Logged out&#039;]);

});

});</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 = [&#039;name&#039;, &#039;email&#039;, &#039;password&#039;];

}</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(&#039;/api/tokens/create&#039;, {

method: &#039;POST&#039;,

credentials: &#039;include&#039;

});

const { token } = await response.json();

localStorage.setItem(&#039;api_token&#039;, 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>

Comentários

Mais em PHP

Como Usar Webhooks em PHP: Recebendo e Processando Eventos Externos em Produção
Como Usar Webhooks em PHP: Recebendo e Processando Eventos Externos em Produção

O que são Webhooks e Por Que Importam Webhooks são mecanismos de comunicação...

Arrays em PHP: Indexados, Associativos e Multidimensionais: Do Básico ao Avançado
Arrays em PHP: Indexados, Associativos e Multidimensionais: Do Básico ao Avançado

Arrays Indexados Arrays indexados são a forma mais básica de estrutura de dad...

O que Todo Dev Deve Saber sobre Query Builder Simples: Construindo Consultas Dinâmicas em PHP
O que Todo Dev Deve Saber sobre Query Builder Simples: Construindo Consultas Dinâmicas em PHP

O que é um Query Builder? Um Query Builder é uma classe ou biblioteca que con...