3 min read
Autenticação de APIs no Laravel com Sanctum

🎥 Assista ao vídeo completo sobre esse tutorial no meu canal do YouTube: https://youtu.be/0zhArwO8W8o?si=QHszb97SgPiMezsN

A autenticação em APIs é essencial para garantir a segurança das informações dos usuários. No Laravel, uma das melhores formas de implementar isso é utilizando o Laravel Sanctum. Neste tutorial, vamos configurar a autenticação de uma API passo a passo.

⚠️ Este tutorial foi feito utilizando o Laravel 11, que é a versão atual no momento. Se você estiver usando uma versão diferente, pode ser necessário adaptar alguns passos.

1. Instalando o Sanctum

Para instalar o Sanctum no seu projeto Laravel, basta rodar o seguinte comando:

php artisan install:api

Isso configurará automaticamente o Sanctum e publicará as migrações necessárias.

2. Configurando o modelo de usuário

Agora, vamos modificar o modelo User.php para utilizar o Sanctum. Abra o arquivo app/Models/User.php e adicione o trait HasApiTokens:

use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
}

Isso permitirá que os usuários gerem tokens para autenticar requisições na API.

3. Criando as rotas da API

No arquivo routes/api.php, defina as rotas para registro e login:

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

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

Route::get('/user', function (Request $request) {
    return $request->user();
})->middleware('auth:sanctum');

Aqui, estamos protegendo a rota /user com o middleware auth:sanctum, garantindo que apenas usuários autenticados tenham acesso.

4. Criando o AuthController

Agora, precisamos criar um controller para lidar com a autenticação. No arquivo app/Http/Controllers/AuthController.php, adicione o seguinte código:

namespace App\Http\Controllers;

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

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

        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
        ]);

        return response()->json($user, 201);
    }

    public function login(Request $request)
    {
        $request->validate([
            'email' => 'required|email',
            'password' => 'required|string',
        ]);

        if (!Auth::attempt($request->only(['email', 'password']))) {
            return response()->json(['message' => 'Invalid credentials'], 401);
        }

        $user = User::where('email', $request->email)->first();
        $token = $user->createToken('auth_token')->plainTextToken;

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

Esse controlador permite que os usuários se registrem e façam login. No login, retornamos um token que o cliente deve enviar nas requisições autenticadas.

5. Testando a API

Agora, podemos testar nossa API usando o Postman ou o curl. Para registrar um usuário:

curl -X POST \
  http://localhost/api/register \
  -H "Content-Type: application/json" \
  -d '{"name": "John Doe", "email": "[email protected]", "password": "123456"}'

Para fazer login:

curl -X POST \
  http://localhost/api/login \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]", "password": "123456"}'

Isso retornará um token. Para acessar uma rota protegida:

curl -X GET \
  http://localhost/api/user \
  -H "Authorization: Bearer SEU_TOKEN_AQUI"

Se o token for válido, a API responderá com os dados do usuário autenticado.


Com esses passos, você configurou a autenticação de uma API Laravel utilizando Sanctum! Para mais detalhes e demonstrações práticas, não se esqueça de assistir ao vídeo completo no meu canal do YouTube. 🚀

Gostou desse conteúdo?

Se você gostou deste conteúdo, não deixe de conferir meus outros posts e se conectar comigo nas redes sociais.