Post Top Ad

Your Ad Spot

jueves, 8 de octubre de 2020

Autenticación de API REST de Laravel 8 con tutorial de JWT por ejemplo

 A lo largo de este tutorial, aprenderemos cómo autenticar las API REST usando JWT en la última versión de Laravel 8. Aprenderá a crear una API REST usando Laravel 8 con autenticación JWT.

Veremos cómo configurar la autenticación JWT en Laravel 8 e implementar una API REST segura usando el paquete tymon / jwt-auth .

Tutorial de autenticación de Laravel 8 JWT por ejemplo

En este tutorial, veremos paso a paso cómo implementar una API REST con PHP y Laravel 8 con autenticación a través de tokens JWT.

Paso 1: creación de una aplicación Laravel 8

Comencemos nuestro tutorial creando una aplicación Laravel 8 usando Composer, la herramienta de administración de dependencias para desarrolladores PHP.

Dirígete a una nueva interfaz de línea de comandos y ejecuta el siguiente comando:

$ composer create-project --prefer-dist laravel/laravel laravel8jwtapp

Paso 2: configurar una base de datos MySQL

Después de crear su aplicación Laravel 8 usando Composer, configuremos una base de datos MySQL en nuestro segundo paso.

Abra el archivo .env ubicado en la raíz de su aplicación Laravel 8 ′. A continuación, agregue la siguiente información de configuración de la base de datos:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE= <database-name>
DB_USERNAME= <database-username>
DB_PASSWORD= <database-password>

Paso 3: instalación de jwt-laravel

Ahora que tenemos una aplicación Laravel 8 con una base de datos MySQL configurada, comencemos a implementar la autenticación JWT instalando el paquete jwt-auth .

Regrese a su terminal y ejecute el siguiente comando desde la raíz de la carpeta de su proyecto:

$ composer require tymon/jwt-auth

Paso 4: configuración de la autenticación JWT en Laravel 8

En este paso, tenemos una aplicación Laravel 8 con MySQL configurado. También instalamos la biblioteca jwt-auth en el paso anterior. Ahora, configuremos la autenticación JWT en nuestra aplicación.

Dirígete al archivo config / app.php y agrega proveedores JWT y alias de la siguiente manera:

'providers' => [
….
'TymonJWTAuthProvidersJWTAuthServiceProvider',
],
'aliases' => [
….
'JWTAuth' => 'TymonJWTAuthFacadesJWTAuth',
'JWTFactory' => 'TymonJWTAuthFacadesJWTFactory',
],

Luego, regrese a su terminal y ejecute el siguiente comando:

$ php artisan vendor:publish --provider="TymonJWTAuthProvidersJWTAuthServiceProvider"

Paso 5: generación de una clave secreta JWT

Después de configurar la autenticación JWT en nuestra aplicación Laravel 8. Necesitaremos generar una clave secreta JWT en este paso.

Dirígete a tu terminal y ejecuta el siguiente comando para generar la clave secreta JWT:

$ php artisan jwt:generate

A continuación, abra vendor / tymon / src / Commands / JWTGenerateCommand.php y actualícelo de la siguiente manera:

public function handle() {$this->fire();}

Paso 6: implementación de la autenticación JWT en el modelo de usuario de Laravel 8

Después de configurar JWT en Laravel 8. En este paso, lo implementaremos en el modelo de Usuario.

Abra el archivo App / User.php y actualícelo de la siguiente manera:

<?php 

namespace App;

use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    protected $fillable = [
        'name', 'email', 'password',
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];

}

Paso 7: implementación del controlador de API REST para la autenticación de JWT

Implementemos ahora un controlador Laravel 8 para manejar la autenticación JWT en nuestra aplicación REST API.

Regrese a su terminal y ejecute el siguiente comando para generar un controlador:

$ php artisan make:controller JwtAuthController

A continuación, abra el archivo app / http / controllers / JwtAuthController.php y agregue los siguientes métodos:

<?php

namespace AppHttpControllers;

use JWTAuth;
use Validator;
use AppUser;
use IlluminateHttpRequest;
use AppHttpRequestsRegisterAuthRequest;
use TymonJWTAuthExceptionsJWTException;
use SymfonyComponentHttpFoundationResponse;

class JwtAuthController extends Controller
{
    public $token = true;

    public function register(Request $request)
    {

         $validator = Validator::make($request->all(), 
                      [ 
                      'name' => 'required',
                      'email' => 'required|email',
                      'password' => 'required',  
                      'c_password' => 'required|same:password', 
                     ]);  

         if ($validator->fails()) {  

               return response()->json(['error'=>$validator->errors()], 401); 

            }   


        $user = new User();
        $user->name = $request->name;
        $user->email = $request->email;
        $user->password = bcrypt($request->password);
        $user->save();

        if ($this->token) {
            return $this->login($request);
        }

        return response()->json([
            'success' => true,
            'data' => $user
        ], Response::HTTP_OK);
    }

    public function login(Request $request)
    {
        $input = $request->only('email', 'password');
        $jwt_token = null;

        if (!$jwt_token = JWTAuth::attempt($input)) {
            return response()->json([
                'success' => false,
                'message' => 'Invalid Email or Password',
            ], Response::HTTP_UNAUTHORIZED);
        }

        return response()->json([
            'success' => true,
            'token' => $jwt_token,
        ]);
    }

    public function logout(Request $request)
    {
        $this->validate($request, [
            'token' => 'required'
        ]);

        try {
            JWTAuth::invalidate($request->token);

            return response()->json([
                'success' => true,
                'message' => 'User logged out successfully'
            ]);
        } catch (JWTException $exception) {
            return response()->json([
                'success' => false,
                'message' => 'Sorry, the user cannot be logged out'
            ], Response::HTTP_INTERNAL_SERVER_ERROR);
        }
    }

    public function getUser(Request $request)
    {
        $this->validate($request, [
            'token' => 'required'
        ]);

        $user = JWTAuth::authenticate($request->token);

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

Paso 7 - Agregar rutas de API REST de Laravel 8

Ahora que hemos implementado la autenticación JWT en nuestro modelo de usuario de Laravel 8. En este paso, procederemos a crear nuestras rutas de API REST.

Abra el archivo routes / api.php y actualícelo de la siguiente manera:

Route::post('login', 'JwtAuthController@login');
Route::post('register', 'JwtAuthController@register');

Route::group(['middleware' => 'auth.jwt'], function () {

    Route::get('logout', 'JwtAuthController@logout');
    Route::get('user-info', 'JwtAuthController@getUser');
});

Paso 9 - Servicio de su aplicación de autenticación de API REST de Laravel 8

Después de implementar la autenticación JWT en nuestra aplicación API REST de Laravel 8, ejecutemos nuestro servidor de desarrollo local usando el siguiente comando:

$ php artisan serve

Conclusión

A lo largo de este tutorial, hemos visto paso a paso cómo implementar la autenticación JWT para asegurar y proteger sus puntos finales de API REST creados con PHP y Laravel 8.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

outbrain

Páginas