0% encontró este documento útil (0 votos)
166 vistas13 páginas

API REST en Laravel 8 Con Autenticación JWT

Este documento describe cómo crear una API REST con autenticación JWT en Laravel 8. Explica cómo instalar las dependencias necesarias como JWT, configurar el middleware de autenticación, y crear un controlador para registrar usuarios y generar tokens de autenticación.

Cargado por

Kathy Hernández
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
166 vistas13 páginas

API REST en Laravel 8 Con Autenticación JWT

Este documento describe cómo crear una API REST con autenticación JWT en Laravel 8. Explica cómo instalar las dependencias necesarias como JWT, configurar el middleware de autenticación, y crear un controlador para registrar usuarios y generar tokens de autenticación.

Cargado por

Kathy Hernández
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 13

18/6/2021 API REST en Laravel 8 con autenticación JWT

Nunca pares de aprender sobre la seguridad de tus datos . Aquí puedes ver nuestros Términos de Uso y 
actualizaciones de nuestras políticas de privacidad

62 pts Menú

Antes:$349

$259
< Curso de PHP con Laravel

API REST en Laravel 8 con autenticación JWT


3
trixtaro  14155

<h1>Autenticación con token JWT en Laravel 8</h1>


Laravel es un framework de PHP increible, pero tal vez te has preguntado como usarlo de Backend para que
otras aplicaciones puedan obtener información de nuestra aplicación, o simplemente, deseas crear un
Frontend que consuma los recursos de la API REST.
De ahí que surja la duda, ¿Cómo hago para autenticar los usuarios?
La solución es JWT.

Si todavía no conoces como funciona Laravel o qué es Laravel, te recomiendo ver el Curso de PHP con Laravel.
JWT te permite retornar un token de autenticación que te identi cará como usuario del sistema, que se
guardará del lado del navegador (localStorage, sessionStorage, cookies, Redux, etc…).
Una vez que ya entendiste la idea, manos a la obra.
<h1>Creando nuestro proyecto</h1>
NOTA: No es necesario realizar estos pasos si tu proyecto de Laravel ya está creado.
Lo primero que debemos hacer es tener instalado el gestor de dependencias de PHP composer.
Aquí te dejo un link para que puedas instalarlo sin problemas, en la versión de Ubuntu.
Para otras sistemas operativos, te recomiendo la página o cial de Composer
Una vez lo tengamos instalado, comprobamos que funcione correctamente, escribiendo en nuestra terminal:
https://platzi.com/tutoriales/1467-curso-php-laravel/7629-api-rest-en-laravel-8-con-autenticacion-jwt/ 1/13
18/6/2021 API REST en Laravel 8 con autenticación JWT

composer --version

Tendrás un resultado similar a este:

Composer version 1.10.15 2020-10-13 15:59:09

Si no tienes instalado Laravel, lo instalamos de esta forma en Ubuntu:

composer global require laravel/installer

Para otros sistemas operativos, les recomiendo leer el Manual de instalación de Laravel
Una vez, tengamos nuestras dependencias listas, nos movemos a nuestro directorio donde vamos a crear una
carpeta para guardar nuestro proyecto. y ejecutamos el siguiente comando para crear nuestro proyecto de
Laravel:

composer create-project --prefer-dist laravel/laravel nombre-proyecto

Una vez creado nuestro proyecto, accedemos a el:

cd nombre-proyecto/

Ahora vamos a probar si funciona la aplicación correctamente, iniciando el servidor de desarrollo:

php artisan serv

Nos mostrará un enlace a nuestro servidor local, algo parecido a esto:

Starting Laravel development server: http://127.0.0.1:8000

https://platzi.com/tutoriales/1467-curso-php-laravel/7629-api-rest-en-laravel-8-con-autenticacion-jwt/ 2/13
18/6/2021 API REST en Laravel 8 con autenticación JWT

Copiamos el URL en nuestro navegador y nos debe mostrar esta vista:

Y ya estaría con gurado nuestro proyecto correctamente.


<h1>Generando nuestra base de datos</h1>
Es necesario con gurar nuestras variables de entorno de conexión a nuestra base de datos en el archivo .env,
para esto puedes usar tu editor de texto de con anza (Vim, Nano, VS Code, Sublime Text, etc…)
Debemos tener nuestra base de datos creada sin tablas para ejecutar la migración por defecto de Laravel, que
permite crear la tabla users

php artisan migrate

Si quieres personalizar tu tabla usuarios, puedes personalizar esto en con g/auth.php y app/Models/User.php
<h1>Instalando y con gurando JWT</h1>
Vamos a instalar las dependencias de JWT:

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

Debes incluir la siguiente línea en el archivo con g/app.php dentro del array de providers

Tymon\JWTAuth\Providers\LaravelServiceProvider::class,

En el mismo archivo, en el array aliases agregamos las siguientes líneas:

https://platzi.com/tutoriales/1467-curso-php-laravel/7629-api-rest-en-laravel-8-con-autenticacion-jwt/ 3/13
18/6/2021 API REST en Laravel 8 con autenticación JWT

'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,


'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class,

Comprobamos que funcione correctamente con el siguiente comando:

php artisan jwt:secret

Ahora en la clase User, implementamos los siguientes 2 métodos:

public function getJWTIdentifier()


{
return $this->getKey();
}

public function getJWTCustomClaims()


{
return [];
}

Es necesario que esta clase implemente JWTSubject

use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Authenticatable implements JWTSubject {

Crearemos un middleware para JWT con el siguiente comando:

php artisan make:middleware JwtMiddleware

Modi camos el nuevo Middleware con las siguientes líneas de código:

<?php

namespace App\Http\Middleware;

use Closure;
use JWTAuth;
use Exception;
use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;
https://platzi.com/tutoriales/1467-curso-php-laravel/7629-api-rest-en-laravel-8-con-autenticacion-jwt/ 4/13
18/6/2021 API REST en Laravel 8 con autenticación JWT

class JwtMiddleware extends BaseMiddleware


{

public function handle($request, Closure $next)


{
try {
$user = JWTAuth::parseToken()->authenticate();
} catch (Exception $e) {
if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenInvalidExcep
return response()->json(['status' => 'Token is Invalid'])
}else if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenExpire
return response()->json(['status' => 'Token is Expired'])
}else{
return response()->json(['status' => 'Authorization Token
}
}
return $next($request);
}
}

Para nalizar este paso, añadimos el nuevo Middleware al Kernel, agregando la siguiente línea al archivo en
app/http/Kernel.php en routeMiddleware:

'jwt.verify' => \App\Http\Middleware\JwtMiddleware::class,

<h1>Con gurando métodos y rutas</h1>


Ahora procedemos a crear UserController para crear los métodos de registro y autenticación:

php artisan make:controller UserController

Una vez creado en la app/Http/Controllers, procedemos a modi carlo para que quede de la siguiente forma:

<?php
namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
https://platzi.com/tutoriales/1467-curso-php-laravel/7629-api-rest-en-laravel-8-con-autenticacion-jwt/ 5/13
18/6/2021 API REST en Laravel 8 con autenticación JWT

class UserController extends Controller


{
public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password');
try {
if (! $token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'invalid_credentials'], 4
}
} catch (JWTException $e) {
return response()->json(['error' => 'could_not_create_token'], 50
}
return response()->json(compact('token'));
}

public function getAuthenticatedUser()


{
try {
if (!$user = JWTAuth::parseToken()->authenticate()) {
return response()->json(['user_not_found'], 404);
}
} catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
return response()->json(['token_expired'], $e->getStatusC
} catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
return response()->json(['token_invalid'], $e->getStatusC
} catch (Tymon\JWTAuth\Exceptions\JWTException $e) {
return response()->json(['token_absent'], $e->getStatusCo
}
return response()->json(compact('user'));
}

public function register(Request $request)


{
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);

if($validator->fails()){
return response()->json($validator->errors()->toJson(), 4
}

$user = User::create([
'name' => $request->get('name'),
'email' => $request->get('email'),
'password' => Hash::make($request->get('password')),
https://platzi.com/tutoriales/1467-curso-php-laravel/7629-api-rest-en-laravel-8-con-autenticacion-jwt/ 6/13
18/6/2021 API REST en Laravel 8 con autenticación JWT

]);

$token = JWTAuth::fromUser($user);

return response()->json(compact('user','token'),201);
}
}

Lo siguiente es indicarle a nuestro aplicación cuales son las rutas a las que se accederán para registrarse e
iniciar sesión. Para esto modi caremos el archivo routes/api.php.
Debemos comentar las siguientes lineas:

Route::middleware('auth:api')->get('/user', function (Request $request) {


return $request->user();
});

// Route::middleware('auth:api')->get('/user', function (Request $request


// return $request->user();
// });

Y escribir las siguientes líneas:

Route::post('register', 'App\Http\Controllers\UserController@register');
Route::post('login', 'App\Http\Controllers\UserController@authenticate');

Creamos un group para indicar cuales son las rutas que necesitan autenticación:

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

Route::post('user','App\Http\Controllers\UserController@getAuthentica

});

NOTA: Las rutas que guardemos en api, tendrán por defecto la ruta /api

https://platzi.com/tutoriales/1467-curso-php-laravel/7629-api-rest-en-laravel-8-con-autenticacion-jwt/ 7/13
18/6/2021 API REST en Laravel 8 con autenticación JWT

Ya tenemos todo listo para poder registrar usuarios y hacer login.


<h1>Enviando peticiones a nuestro backend</h1>
Podemos usar Postman para realizar una petición en formato JSON con POST hacia la ruta /api/register:

{
"name" : "randomusername",
"password" : "strongkey123",
"password_confirmation" : "strongkey123",
"email" : "[email protected]"
}

Se puede ver como se registró correctamente nuestro usuario.


El inicio de sesión consiste en enviar las credenciales de acceso y obtener un token, que nos permitirá acceder
a rutas que se necesita autenticación. La ruta de login es /api/login usando el método GET

{
"email" : "[email protected]",
"password" : "strongkey123"
}

https://platzi.com/tutoriales/1467-curso-php-laravel/7629-api-rest-en-laravel-8-con-autenticacion-jwt/ 8/13
18/6/2021 API REST en Laravel 8 con autenticación JWT

Como último paso es acceder a una ruta protegida con nuestro token de autenticación.
Nuestro token se debe enviar con el header Authorization y colcando la palabra Bearer antes de nuestro
token

Authorization: Bearer <nuestroToken>

La ruta para obtener los datos de usuario es /api/user mediante el método POST

Ahora sí, está todo listo.


Ya estás listo para crear tu backend en Laravel 8 para comunicarte con cualquier aplicación que quieras
desarrollar.
Te invito a escribir en la caja de comentarios y, NUNCA PARES DE APRENDER

6  hace 8 meses PHP

https://platzi.com/tutoriales/1467-curso-php-laravel/7629-api-rest-en-laravel-8-con-autenticacion-jwt/ 9/13
18/6/2021 API REST en Laravel 8 con autenticación JWT

Escribe tu comentario +2 

Ordenar por: Top

JeithxD 8095 Puntos  5 meses


3 excelente. me pase todo el dia buscando esto . no sabia como hacerlo de manera e ciente en el back y quería
algo que no fuera tan engorroso. tu tutorial me salvo la vida.
muchas gracias

Responder + 2 

jorge-andres-perdomo 1890 Puntos  4 meses


1 Excelente tutorial, muchas gracias, en la de nición de la ruta de login se usó el método post, pero después se
hace la solicitud a esa ruta con el método get, así que normalmente ¿cuál de los dos métodos se usa para un
login?

Responder + 2 

patrick-lazo 25 Puntos  un mes


1 Muy buen tutorial justo lo que buscaba solo una sugerencia en la parte donde mencionas php artisan
jwt:secret para mi que soy nuevo en laravel pense que era como una prueba sin embargo revisando la
documentacion se re ere a la secret key necesaria para realizar la encriptación creo que valdria la pena
especi carlo.

Responder + 2 

jgarcia 2227 Puntos  2 meses


0 Está genial! gran aporte y supe fácil de implementar,

Una duda, alguna idea de como podría implementar 2 backends (diferentes frameworks) con jwt token? con
que la autenti cación la ejecuta laravel, no acabo de como puedo aplicarlo para esto

Responder + 2 

denevy 4 Puntos  3 meses


0 Excelente aporte, gracias por compartir tu conocimiento, me fue de mucha ayuda, Bendiciones!!!

https://platzi.com/tutoriales/1467-curso-php-laravel/7629-api-rest-en-laravel-8-con-autenticacion-jwt/ 10/13
18/6/2021 API REST en Laravel 8 con autenticación JWT

Responder + 2 

fernando- eitas 4 Puntos  4 meses


0 Excelente el tutorial, justo lo que estaba buscando, pero me está dando un error en la recuperación de los
datos de user…

“status”: “Authorization Token not found”

Lo seguí hasta
Tymon\JWTAuth\Exceptions\JWTException: The token could not be parsed from the request in le
E:\internet\www\pedidosresto\back-resto\vendor\tymon\jwt-auth\src\JWT.php on line 185
Alguna pista ???
Gracias!!

amaurijimenez  3 meses

1 Tengo el mismo problema, en el archivo que esta en la ruta


app\http\Middleware\JwtMiddleware.php

<code>
<?php

namespaceApp\Http\Middleware;

useClosure;
useIlluminate\Http\Request;
useJWTAuth;
useException;
useTymon\JWTAuth\Http\Middleware\Base
Middleware;

classJwtMiddlewareextendsBaseMiddlewa
re
{
/**
* Handle an incoming request.
*
* @param
\Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/

publicfunctionhandle(Request
$request, Closure $next)
{
try {

$user =
JWTAuth::parseToken()-
>authenticate();

} catch (Exception $e) {


if ($e instanceof
\Tymon\JWTAuth\Exceptions\TokenInvali
dException){

https://platzi.com/tutoriales/1467-curso-php-laravel/7629-api-rest-en-laravel-8-con-autenticacion-jwt/ 11/13
18/6/2021 API REST en Laravel 8 con autenticación JWT

return response()-
>json(['status' => 'Token is
Invalid']);
}elseif ($e instanceof
\Tymon\JWTAuth\Exceptions\TokenExpire
dException){
return response()-
>json(['status' => 'Token is
Expired']);
}else{
return response()-
>json(['status' => 'Authorization
Token not found', 'detail' => $e-
>getMessage(), 'error'=> $e]);
}
}
return $next($request);
}
}

Asi te debe devolver el problema que tienes, por ejemplo yo en mi tabla de usuarios tengo el
problema que no tengo un campo con el nombre id

<code>
{
"status": "Authorization Token
not found",
"detail": "SQLSTATE[42S22]:
[Microsoft][ODBC Driver 17 for SQL
Server][SQL Server]El nombre de
columna 'id' no es válido. (SQL:
select top 1 * from [std_Usuarios]
where [id] is null)",
"error": {
"errorInfo": [
"42S22",
207,
"[Microsoft][ODBC Driver
17 for SQL Server][SQL Server]El
nombre de columna 'id' no es
válido.",
"42000",
8180,
"[Microsoft][ODBC Driver
17 for SQL Server][SQL Server]No se
puede preparar la instrucción o
instrucciones."
]
}
}

Responder + 2 

https://platzi.com/tutoriales/1467-curso-php-laravel/7629-api-rest-en-laravel-8-con-autenticacion-jwt/ 12/13
18/6/2021 API REST en Laravel 8 con autenticación JWT

Entradas relacionadas

Inyección de dependencias en PHP

En el curso se menciona que Laravel utiliza un patrón de diseño llamado “Inyección de


Dependencias”, no lo conocía así que me puse a investi

Felix

https://platzi.com/tutoriales/1467-curso-php-laravel/7629-api-rest-en-laravel-8-con-autenticacion-jwt/ 13/13

También podría gustarte