API REST en Laravel 8 Con Autenticación JWT
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
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
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:
cd nombre-proyecto/
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
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:
Debes incluir la siguiente línea en el archivo con g/app.php dentro del array de providers
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
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
use Tymon\JWTAuth\Contracts\JWTSubject;
<?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
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:
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
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::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::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
{
"name" : "randomusername",
"password" : "strongkey123",
"password_confirmation" : "strongkey123",
"email" : "[email protected]"
}
{
"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
La ruta para obtener los datos de usuario es /api/user mediante el método POST
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
Responder + 2
Responder + 2
Responder + 2
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
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
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
<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();
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
Felix
https://platzi.com/tutoriales/1467-curso-php-laravel/7629-api-rest-en-laravel-8-con-autenticacion-jwt/ 13/13