![mohammad-rahmani-oXlXu2qukGE-unsplash Laravel Sanctum crear API Restful](https://diarioprogramador.com/wp-content/uploads/2021/12/mohammad-rahmani-oXlXu2qukGE-unsplash-640x427.jpg)
En este tutorial te mostraré como crear en Laravel Sanctum una API Restful la cual podrá registrar usuarios y dar acceso mediante la generación de tokens, encontrarás el repositorio de este proyecto al final del tutorial. Sin más manos a la obra.
Requisitos previos
- Contar con un entorno de desarrollo como Laragon o Xampp.
- Tener instalado de manera global Composer.
- Contar con un proyecto nuevo en Laravel vinculado a una base de datos.
- Tener la herramienta Postman instalada en tu equipo.
1. Instalar laravel/ui
En este tutorial vas a construir una API que permita registrar usuarios y mostrará como respuesta el token personal del usuario y el tipo de token, para ello es necesario instalar un sistema de autenticación, para este tutorial usaré laravel/ui, desde terminal escribe:
composer require laravel/ui php artisan ui bootstrap php artisan ui bootstrap --auth npm i npm run watch-poll npm install && npm run dev
2. Instalar Laravel Sanctum
Para instalar Laravel Sanctum en tu nuevo proyecto abre tu terminal de comandos en la carpeta raíz de tu aplicación en Laravel y escribe el siguiente comando:
composer require laravel/sanctum
Ahora para publicar los archivos de configuración de Sanctum y las migraciones desde la terminal escribe:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
Abre el proyecto con tu editor de textos favorito, en mi caso usaré VS Code y dirigete a la ruta config/sanctum.php allí verás el archivo de configuración de Sanctum:
Y el archivo con la migración de Sanctum lo encontrarás en database/migrations:
Para que tu aplicación logre conectarse a la base de datos recuerda en tu archivo .env haber agregado el nombre de la base de datos:
Desde la terminal de comandos corre las migraciones con el comando:
php artisan migrate
Con este comando se han creado en la base de datos las tablas necesarias para que en poco tiempo puedas crear una API Restful en Laravel Sanctum.
3. Agregar trait a modelo User
Con tu editor de textos abre el archivo app/Models/User.php verifica que el trait ‘HasApiTokens’ este definido, sino es así agregalo:
4. Crear controlador que autenticará la API
Para crear el controlador que se encargará de autenticar la API desde la terminal escribe:
php artisan make:controller AuthController
5. Crear el método register
En el controlador recién creado AuthController agregarás el método register que será el encargado de registrar, validar a los usuarios y regresar una respuesta JSON con el token del usuario y tipo de token:
public function register(Request $request){ //se valida la información que viene en $request $validatedData = $request->validate([ 'name' => 'required|string|max:50', 'email' => 'required|string|max:80', 'password' => 'required|string|min:8' ]); //se crea el usuario en la base de datos $user = User::create([ 'name' => $validatedData['name'], 'email' => $validatedData['email'], 'password' => Hash::make($validatedData['password']) ]); //se crea token de acceso personal para el usuario $token = $user->createToken('auth_token')->plainTextToken; //se devuelve una respuesta JSON con el token generado y el tipo de token return response()->json([ 'access_token' => $token, 'token_type' => 'Bearer' ]); }
Recuerda importar el modelo User y el facades Hash:
6. Crear la ruta para el método register
Para crear la ruta para el método register abre el archivo routes/api.php y agrega el siguiente código:
Route::post('/register', [AuthController::class, 'register']);
7. Probar primer endpoint
Llegó el momento de probar el primer servicio que has creado, enciende el servidor incluido en Laravel:
php artisan serve
Abre la herramienta Postman y ve a la sección API, cambia el método de GET a POST y agrega en la barra la dirección del endpoint http://127.0.0.1:8000/api/register como en la imagen:
Ve a la pestaña Body y marca la opción x-www-form-urlencoded en el formulario agrega los datos que se están esperando del usuario y envía los datos presionando el boton Send:
Sí todo es correcto en la parte de abajo verás que la API esta respondiendo con el token personal del usuario y el tipo de token, tu endpoint esta funcionando!
8. Crear método login
Vuelve al editor de texto y abre el controlador app/Http/Controllers/AuthController.php agrega el método login:
public function login(Request $request){ //valida las credenciales del usuario if (!Auth::attempt($request->only('email', 'password'))){ return response()->json([ 'message' => 'Invalid access credentials' ], 401); } //Busca al usuario en la base de datos $user = User::where('email', $request['email'])->firstOrFail(); //Genera un nuevo token para el usuario $token = $user->createToken('auth_token')->plainTextToken; //devuelve una respuesta JSON con el token generado y el tipo de token return response()->json([ 'access_token' => $token, 'token_type' => 'Bearer' ]); }
9. Crear la ruta para el método login
Ve al archivo routes/api.php y agrega la ruta del método login:
Route::post('/login', [AuthController::class, 'login']);
![](https://diarioprogramador.com/wp-content/uploads/2021/12/11-laravel-sanctum-api-restful.jpg)
10. Probar segundo endpoint en Postman
Desde Postman cambia la ruta, solo sustituye la palagra register por login e ingresa tus datos de acceso:
Ahora prueba enviando credenciales inválidas:
El segundo endpoint esta funcionando!
11. Crear tercer endpoint dataUser
Por último vas a crear un método que regrese la información del usuario para ello regresa al archivo del controlador app/Http/Controllers/AuthController.php y escribe:
public function dataUser(Request $request){ //devuelve la información del usuario return $request->user(); }
12. Agregar ruta para el método dataUser
En el archivo routes/api.php agregar la ruta para el método dataUser:
Route::post('/datauser', [AuthController::class, 'dataUser'])->middleware('auth:sanctum');
13. Probar tercer endpoint
Para que la prueba de este endpoint funcione es necesario hacer unos cambios en la configuracion de Postman, en la pestaña Headers deshabilita la opción Accept y crea una nueva llamada igual Accept con el valor de ‘application/json’ y en la ruta cambia a /datauser y envía la petición debe responder en mensaje Unauthenticated:
Abre una nueva pestaña en Postman y pide un nuevo token mandando una petición desde la ruta /login, copea el nuevo token:
Cambia de pestaña y ve al endpoint /datauser, en la pestaña Authorization en Type selecciona Bearer Token y en el lado derecho pega el token que copiaste anteriormente, manda la petición:
El endpoint datauser/ esta respondiendo con los datos del usuario autenticado funcionando correctamente!
Conclusión
En este tutorial te he mostrado de manera general cómo crear una API Restful con Laravel Sanctum la cual registra y da acceso a un usuario mediante la generación de tokens, el tema es muy amplio y espero en tutoriales posteriores mostrar más de ello. Sí este tutorial te ha servido te invito a compartirlo en tus redes sociales para llegar a más personas y si tienes dudas o comentarios déjalos en la caja de comentarios estaré al pendiente de ellos. Recibe un cordial saludo.
Clonar repositorio:
git clone https://github.com/diarioprogramador/laravel-sanctum-api-restful-user-token.git
Fuente: Laravel Sanctum docs
Cómo autenticar usando un microservicio en lugar de lambase de datos de laravel.
Hola Mike, gracias por visitar y comentar. Espero en breve crear un artículo hablando del tema, en cuanto lo publique te mandaré un email informandote. Saludos.
Excelente artículo!! Después de horas de buscar una solución y aquí la encontré, muchas gracias por compartir tus conocimientos!!!
Hola Sergio, gracias por visitar y comentar. Me alegro de que te ayudó este tutorial, te mando un saludo.