Laravel Sanctum crear API Restful
Photo by Mohammad Rahmani on Unsplash

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

  1. Contar con un entorno de desarrollo como Laragon o Xampp.
  2. Tener instalado de manera global Composer.
  3. Contar con un proyecto nuevo en Laravel vinculado a una base de datos.
  4. 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:

Laravel Sanctum crear API Restful

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!

Laravel Sanctum crear API Restful

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']);

10. Probar segundo endpoint en Postman

Desde Postman cambia la ruta, solo sustituye la palagra register por login e ingresa tus datos de acceso:

laravel-sanctum-crear-api-restful

Ahora prueba enviando credenciales inválidas:

laravel-sanctum-crear-api-restful

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');
Como ves esta ruta esta protegida por el 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:

Laravel Sanctum crear API Restful

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.

Repositorio del proyecto

Clonar repositorio:

git clone https://github.com/diarioprogramador/laravel-sanctum-api-restful-user-token.git

Fuente: Laravel Sanctum docs

4 COMENTARIOS

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.