En este artículo, aprenderemos cómo implementar una API REST utilizando Passport en Laravel 5.6. Passport es una biblioteca de autenticación de Laravel que facilita la implementación de autenticación de usuarios en una API REST. Con Passport, podemos generar tokens de acceso para autenticar a los usuarios y proteger nuestras rutas de API.
Requisitos previos
Antes de comenzar, asegúrate de tener los siguientes requisitos previos:
– PHP 7.1.3 o superior
– Composer instalado
– Laravel 5.6 instalado
Instalación de Laravel 5.6
Para comenzar, primero debemos instalar Laravel 5.6 en nuestro sistema. Podemos hacer esto utilizando Composer ejecutando el siguiente comando en la terminal:
composer create-project –prefer-dist laravel/laravel nombre-del-proyecto «5.6.*»
Esto creará una nueva instalación de Laravel 5.6 en un directorio llamado «nombre-del-proyecto».
Configuración de Passport
Una vez que tenemos Laravel 5.6 instalado, podemos comenzar a configurar Passport. Primero, debemos instalar Passport utilizando Composer ejecutando el siguiente comando en la terminal:
composer require laravel/passport
Después de instalar Passport, debemos publicar sus archivos de configuración y migraciones ejecutando los siguientes comandos en la terminal:
php artisan vendor:publish –tag=passport-config
php artisan vendor:publish –tag=passport-migrations
Esto copiará los archivos de configuración y migraciones de Passport en nuestro proyecto.
A continuación, debemos ejecutar las migraciones para crear las tablas necesarias para Passport. Podemos hacer esto ejecutando el siguiente comando en la terminal:
php artisan migrate
Una vez que las migraciones se hayan ejecutado correctamente, debemos ejecutar el siguiente comando para generar las claves de encriptación necesarias para Passport:
php artisan passport:install
Este comando generará las claves de encriptación y las claves de acceso personal para Passport.
Finalmente, debemos agregar el trait «HasApiTokens» a nuestro modelo de usuario. Esto nos permitirá generar tokens de acceso para autenticar a los usuarios. Abre el archivo «app/User.php» y agrega la siguiente línea de código:
use LaravelPassportHasApiTokens;
Y luego agrega el trait «HasApiTokens» a la clase User:
use HasApiTokens;
Creación de rutas y controladores
Ahora que hemos configurado Passport, podemos comenzar a crear nuestras rutas y controladores para nuestra API REST. Primero, abrimos el archivo «routes/api.php» y agregamos las siguientes rutas:
Route::post(‘register’, ‘AuthRegisterController@register’);
Route::post(‘login’, ‘AuthLoginController@login’);
Route::middleware(‘auth:api’)->group(function () {
Route::get(‘user’, ‘UserController@getUser’);
Route::post(‘logout’, ‘AuthLoginController@logout’);
});
Estas rutas nos permitirán registrar usuarios, iniciar sesión, obtener información del usuario autenticado y cerrar sesión.
A continuación, creamos los controladores necesarios para manejar estas rutas. Podemos hacer esto ejecutando los siguientes comandos en la terminal:
php artisan make:controller Auth/RegisterController
php artisan make:controller Auth/LoginController
php artisan make:controller UserController
Esto creará los controladores necesarios en el directorio «app/Http/Controllers».
En el controlador «RegisterController», agregamos el siguiente método para registrar nuevos usuarios:
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
‘name’ => ‘required’,
‘email’ => ‘required|email|unique:users’,
‘password’ => ‘required’,
])
if ($validator->fails()) {
return response()->json([‘error’ => $validator->errors()], 401);
}
$user = User::create([
‘name’ => $request->name,
‘email’ => $request->email,
‘password’ => bcrypt($request->password),
])
$token = $user->createToken(‘MyApp’)->accessToken;
return response()->json([‘token’ => $token], 200);
}
Este método valida los datos enviados por el usuario, crea un nuevo usuario en la base de datos y genera un token de acceso para el usuario.
En el controlador «LoginController», agregamos el siguiente método para iniciar sesión:
public function login(Request $request)
{
$credentials = $request->only(‘email’, ‘password’);
if (Auth::attempt($credentials)) {
$user = Auth::user();
$token = $user->createToken(‘MyApp’)->accessToken;
return response()->json([‘token’ => $token], 200);
} else {
return response()->json([‘error’ => ‘Unauthorized’], 401);
}
}
Este método intenta autenticar al usuario utilizando las credenciales proporcionadas y genera un token de acceso si la autenticación es exitosa.
En el controlador «UserController», agregamos el siguiente método para obtener información del usuario autenticado:
public function getUser(Request $request)
{
return response()->json([‘user’ => $request->user()], 200);
}
Este método simplemente devuelve la información del usuario autenticado.
En el controlador «LoginController», también agregamos el siguiente método para cerrar sesión:
public function logout(Request $request)
{
$request->user()->token()->revoke();
return response()->json([‘message’ => ‘Successfully logged out’], 200);
}
Este método revoca el token de acceso del usuario autenticado, lo que lo desconecta de la API.
Autenticación de usuarios
Ahora que hemos configurado nuestras rutas y controladores, podemos probar la autenticación de usuarios en nuestra API REST. Primero, asegúrate de que tu servidor local esté en funcionamiento ejecutando el siguiente comando en la terminal:
php artisan serve
Esto iniciará el servidor local de Laravel.
Luego, puedes utilizar una herramienta como Postman para enviar solicitudes a nuestra API REST. Primero, registra un nuevo usuario enviando una solicitud POST a la siguiente URL:
http://localhost:8000/api/register
En el cuerpo de la solicitud, envía los siguientes datos en formato JSON:
{
«name»: «John Doe»,
«email»: «john@example.com»,
«password»: «password»
}
Esto creará un nuevo usuario en la base de datos y generará un token de acceso para el usuario.
Luego, inicia sesión enviando una solicitud POST a la siguiente URL:
http://localhost:8000/api/login
En el cuerpo de la solicitud, envía los siguientes datos en formato JSON:
{
«email»: «john@example.com»,
«password»: «password»
}
Esto iniciará sesión en el usuario y generará un nuevo token de acceso.
Finalmente, puedes obtener información del usuario autenticado enviando una solicitud GET a la siguiente URL:
http://localhost:8000/api/user
Asegúrate de incluir el token de acceso en el encabezado de la solicitud utilizando la siguiente clave-valor:
Authorization: Bearer {token}
Esto devolverá la información del usuario autenticado en formato JSON.
Protección de rutas
Ahora que hemos implementado la autenticación de usuarios en nuestra API REST, podemos proteger nuestras rutas para que solo los usuarios autenticados puedan acceder a ellas. Para hacer esto, simplemente agregamos el middleware «auth:api» a nuestras rutas que queremos proteger.
Por ejemplo, en el archivo «routes/api.php», hemos envuelto nuestras rutas protegidas en el siguiente grupo de middleware:
Route::middleware(‘auth:api’)->group(function () {
Route::get(‘user’, ‘UserController@getUser’);
Route::post(‘logout’, ‘AuthLoginController@logout’);
});
Esto asegurará que solo los usuarios autenticados puedan acceder a estas rutas.
Pruebas de la API
Ahora que hemos implementado nuestra API REST con Passport en Laravel 5.6, podemos probarla utilizando una herramienta como Postman. Podemos enviar solicitudes a nuestras rutas protegidas y verificar que solo los usuarios autenticados puedan acceder a ellas.
Por ejemplo, podemos enviar una solicitud GET a la siguiente URL para obtener información del usuario autenticado:
http://localhost:8000/api/user
Asegúrate de incluir el token de acceso en el encabezado de la solicitud utilizando la siguiente clave-valor:
Authorization: Bearer {token}
Esto devolverá la información del usuario autenticado en formato JSON si el usuario está autenticado correctamente.
Conclusión
En este artículo, hemos aprendido cómo implementar una API REST utilizando Passport en Laravel 5.6. Passport nos permite generar tokens de acceso para autenticar a los usuarios y proteger nuestras rutas de API. Hemos configurado Passport, creado nuestras rutas y controladores, implementado la autenticación de usuarios y protegido nuestras rutas. Ahora podemos crear una API REST segura y autenticada utilizando Laravel 5.6 y Passport.