Instalar laravel
laravel new mi_proyecto
Instalar la última versión de la librería 'jwt-auth'
composer require tymon/jwt-auth:dev-develop --prefer-source
Ejecute el siguiente comando para publicar el archivo de configuración del paquete:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
Ejecute el siguiente comando para generar la clave secreta:
php artisan jwt:secret
Agregar esto en el archivo 'mi_proyecto\app\Http\Kernel.php'
// ...
protected $routeMiddleware = [
'auth.jwt' => \Tymon\JWTAuth\Http\Middleware\Authenticate::class,
];
// ...
Implementar en tu modelo "User" la interface "JWTSubject"
class User extends Authenticatable implements JWTSubject
{
// ...
}
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 [];
}
}
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');
});
// ...
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');
});
});
// ...
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()
);
}
}
como pruebo la ruta que protejo en el paso 8 desde postman?