Skip to content

Instantly share code, notes, and snippets.

@edgarjaviertec
Last active July 15, 2022 14:03
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save edgarjaviertec/ef52f19fe8283a5776f1bda87978e581 to your computer and use it in GitHub Desktop.
Save edgarjaviertec/ef52f19fe8283a5776f1bda87978e581 to your computer and use it in GitHub Desktop.
Agregar autenticación con JWT en Laravel 7 usando la librería 'tymon/jwt-auth'

Autenticación con JWT en Laravel 7

Paso 1

Instalar laravel

laravel new mi_proyecto

Paso 2

Instalar la última versión de la librería 'jwt-auth'

composer require tymon/jwt-auth:dev-develop --prefer-source

Paso 3

Ejecute el siguiente comando para publicar el archivo de configuración del paquete:

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

Paso 4

Ejecute el siguiente comando para generar la clave secreta:

php artisan jwt:secret

Paso 5

Agregar esto en el archivo 'mi_proyecto\app\Http\Kernel.php'

// ...
protected $routeMiddleware = [
    'auth.jwt' => \Tymon\JWTAuth\Http\Middleware\Authenticate::class,
];
// ...

Paso 6

Implementar en tu modelo "User" la interface "JWTSubject"

class User extends Authenticatable implements JWTSubject
{
    // ...
}

Paso 7

Agregar en tu modelo "User" los metodos "getJWTIdentifier()" y "getJWTCustomClaims()"

class User extends Authenticatable implements JWTSubject
{

   // ...

   public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    public function getJWTCustomClaims()
    {
        return [];
    }

}

Paso 8

Agrega el middleware a las rutas que quieres proteger en el archivo 'mi_proyecto\routes\api.php'

// ...
Route::middleware('auth.jwt')->group(function () {
    Route::resource('estimates','EstimatesController');
});
// ...

Paso 9

Agregar las siguientes rutas en el archivo 'mi_proyecto\routes\api.php'

// ...
Route::prefix('auth')->group(function () {
    Route::post('login', 'AuthController@login');
    Route::middleware('auth.jwt')->group(function () {
        Route::post('logout', 'AuthController@logout');
        Route::post('refresh', 'AuthController@refresh');
        Route::post('me', 'AuthController@me');
    });
});
// ...

Paso 10

Crear el controlador 'mi_proyecto\app\Http\Controllers\AuthController.php' con el siguiente código

<?php

namespace App\Http\Controllers;

use Validator;
use Illuminate\Http\Request;
use Tymon\JWTAuth\Facades\JWTAuth;

class AuthController extends Controller
{
    public function login(Request $request)
    {
        $credentials = $request->only("username", "password");
        $validator = Validator::make($credentials, [
            'username' => 'required',
            'password' => 'required',
        ]);
        if ($validator->fails()) {
            return response()->json([
                'success' => false,
                'errors' => $validator->errors()
            ], 422);
        }
        if (!$token = JWTAuth::attempt([
            'nombre_usuario' => $request->username,
            'password' => $request->password
        ])
        ) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => JWTAuth::factory()->getTTL() * 60
        ]);
    }

    public function logout()
    {
        JWTAuth::invalidate();
        return response()->json([
            'message' => 'Successfully logged out'
        ]);
    }

    public function refresh()
    {
        return response()->json([
            'access_token' => JWTAuth::refresh(),
            'token_type' => 'bearer',
            'expires_in' => JWTAuth::factory()->getTTL() * 60
        ]);
    }

    public function me()
    {
        return response()->json(
            JWTAuth::user()
        );
    }
}
@aldafadev
Copy link

como pruebo la ruta que protejo en el paso 8 desde postman?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment