En el desarrollo moderno de APIs, la autenticación mediante tokens es un estándar para proteger los endpoints y garantizar que solo usuarios autorizados accedan a ciertos recursos. En este artículo te explico qué es un token, para qué sirve y cómo puedes implementarlo fácilmente en Laravel usando Laravel Sanctum.
Un token es una cadena generada por el servidor que representa a un usuario autenticado. En lugar de enviar el usuario y la contraseña en cada petición, se utiliza este token para verificar la identidad del usuario.
Un token es como una llave digital. Una vez que te autenticas, el servidor te entrega esta llave para que puedas acceder a recursos protegidos sin tener que volver a introducir tus credenciales.
Laravel Sanctum es una solución sencilla y segura para autenticación de APIs usando tokens. Aquí tienes una guía paso a paso para implementarlo.
composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate
En tu modelo User.php
, agrega el trait HasApiTokens
:
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
}
Configura el archivo config/auth.php
para que use Sanctum como guard:
'guards' => [
'api' => [
'driver' => 'sanctum',
'provider' => 'users',
],
],
Define una ruta que permita iniciar sesión y genere el token:
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
Route::post('/login', function (Request $request) {
$credentials = $request->only('email', 'password');
if (!Auth::attempt($credentials)) {
return response()->json(['message' => 'Unauthorized'], 401);
}
$user = Auth::user();
$token = $user->createToken('api-token')->plainTextToken;
return response()->json(['token' => $token]);
});
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
En cada petición a la API, el cliente debe incluir el token en los headers:
Authorization: Bearer tu_token_aqui
Esto se puede hacer fácilmente con herramientas como Axios, Postman o fetch
en JavaScript.
Puedes definir una ruta para revocar el token actual:
Route::post('/logout', function (Request $request) {
$request->user()->currentAccessToken()->delete();
return response()->json(['message' => 'Token revoked']);
});
La autenticación mediante tokens es una herramienta poderosa para proteger APIs y facilitar el acceso seguro desde cualquier tipo de cliente. Laravel Sanctum ofrece una solución rápida, segura y fácil de implementar para la mayoría de los casos de uso. Con esta guía puedes implementar tu propio sistema de autenticación con tokens y comenzar a construir aplicaciones robustas y seguras.