Construirea unui API Laravel securizat cu autentificare JWT ⋆ ALexHost SRL

Testați-vă abilitățile cu toate serviciile noastre de găzduire și beneficiați de 15% reducere!

Utilizați codul la finalizarea comenzii:

Skills
06.12.2024

Construirea unui API Laravel securizat cu autentificare JWT

Atunci când construiți API-uri cu Laravel, asigurarea unei autentificări sigure este crucială, în special atunci când aveți de-a face cu datele utilizatorilor. JSON Web Tokens (JWT) oferă o metodă robustă de gestionare a autentificării în aplicații fără statel, permițând transmiterea sigură a informațiilor despre utilizator între părți. Acest ghid vă va ghida prin procesul de construire a unui API Laravel sigur folosind autentificarea JWT.

Condiții prealabile

  • Cunoștințe de bază de PHP și Laravel.
  • Laravel instalat pe calculatorul dvs. (de preferință Laravel 9 sau mai nou).
  • Composer instalat.
  • MySQL sau o altă bază de date configurată pentru aplicația dvs.

Pasul 1: Creați un nou proiect Laravel

În primul rând, creați un nou proiect Laravel utilizând Composer:

composer create-project laravel/laravel laravel-jwt-api

Navigați la directorul proiectului dvs:

cd laravel-jwt-api

Pasul 2: Instalarea pachetului de autentificare JWT

Cel mai frecvent utilizat pachet pentru autentificarea JWT în Laravel este tymon/jwt-auth. Instalați-l folosind Composer:

composer require tymon/jwt-auth

După instalarea pachetului, publicați configurația JWT:

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

Acest lucru va crea un fișier config/jwt.php în proiectul dvs.

Pasul 3: Generarea cheii secrete JWT

Generați o cheie secretă pe care JWT o va utiliza pentru semnarea jetoanelor:

php artisan jwt:secret

Aceasta va adăuga o intrare JWT_SECRET la fișierul .env, care este utilizată pentru codificarea și decodificarea jetoanelor.

Pasul 4: Configurați autentificarea

Pentru a configura autentificarea JWT, trebuie să configurați paza implicită pentru API-ul dvs. Actualizați fișierul config/auth.php după cum urmează:

'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],

],
Acest lucru îi spune lui Laravel să folosească driverul jwt pentru cererile API și să se autentifice cu furnizorul users.

Pasul 5: Crearea modelului de utilizator și a migrației

Dacă nu ați creat încă un model de utilizator, îl puteți crea împreună cu fișierul său de migrare:

php artisan make:model User -m

Deschideți fișierul de migrare generat în database/migrations/ și adăugați câmpurile necesare, precum numele, e-mailul și parola:

public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('nume');
$table->string('email')->unique();
$table->string('parola');
$table->timestamps();
});
}

Rulați migrarea pentru a crea tabelul de utilizatori:

php artisan migrate

Pasul 6: Implementarea metodelor JWT în modelul utilizatorului

În modelul User(app/Models/User.php), implementați interfața JWTSubject și metodele necesare:

use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements JWTSubject
{
public function getJWTIdentifier()
{
return $this->getKey(); // Usually the primary key (id)
}
public function getJWTCustomClaims()
{
return [];
}
}

Pasul 7: Crearea controlorilor de autentificare

Creați un controler pentru gestionarea autentificării utilizatorilor:

php artisan make:controller AuthController

În AuthController.php, adăugați metode pentru înregistrarea unui utilizator, conectarea și deconectarea:


'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
$token = JWTAuth::fromUser($user);
return response()->json(['token' => $token], 201);
}
// Conectarea utilizatorului
public function login(Cerere $request)
{
$credentials = $request->only('email', 'password');
if (!$token = Auth::attempt($credentials)) {
return response()->json(['error' => 'Invalid credentials'], 401);
}
return response()->json(['token' => $token]);
}
// Deconectarea utilizatorului (Invalidarea jetonului)
public function logout()
{
Auth::logout();
return response()->json(['message' => 'Successfully logged out']);
}
// Obținerea utilizatorului autentificat
public function me()
{
return response()->json(Auth::user());
}
}

Pasul 8: Definirea rutelor API

Adăugați rute pentru autentificare în routes/api.php:

use App\Http\Controllers\AuthController;
use Illuminate\Support\Facades\Route;
Route::post('register', [AuthController::class, 'register']);
Route::post('login', [AuthController::class, 'login']);
// Rute protejate (necesită token JWT)
Route::middleware('auth:api')->group(function () {
Route::post('logout', [AuthController::class, 'logout']);
Route::get('me', [AuthController::class, 'me']);
});

Aceste rute gestionează înregistrarea utilizatorului, autentificarea, deconectarea și preluarea utilizatorului autentificat.

Pasul 9: Protejarea rutelor API

Pentru a proteja alte rute API, puteți utiliza middleware-ul auth:api. De exemplu, dacă aveți o rută de resurse pentru mesaje:

Route::middleware('auth:api')->group(function () {
Route::resource('posts', PostController::class);
});

Acest lucru asigură faptul că numai utilizatorii autentificați pot accesa aceste rute.

Pasul 10: Testarea API-ului

Puteți testa API-ul utilizând instrumente precum Postman sau cURL.

  • Înregistrați un utilizator:
    • POST /api/register
      Host: your-domain.com
      Content-Type: application/json
      {
      "name": "John Doe",
      "email": "john@example.com",
      "password": "password",
      "password_confirmation": "password"
      }
    • Log in:
      POST /api/login
      Host: your-domain.com
      Content-Type: application/json
      {
      "email": "john@example.com",
      "password": "password"
      }
  • Aceasta va returna un token pe care îl puteți utiliza pentru a autentifica alte cereri.
  • Accesați ruta protejată: Pentru a accesa o rută protejată precum GET /api/me, includeți simbolul în antetul Authorization:
    Authorization: Bearer

Pasul 11: Actualizarea jetoanelor JWT (opțional)

Pentru a actualiza un jeton, puteți adăuga o metodă în AuthController:

public function refresh()
{
$token = Auth::refresh();
return response()->json(['token' => $token]);
}

Adăugați ruta pentru reîmprospătare:

Route::post('refresh', [AuthController::class, 'refresh'])->middleware('auth:api');

Concluzii

Urmând acest ghid, ați construit un API Laravel sigur cu autentificare JWT, permițând înregistrarea utilizatorilor, autentificarea și accesul la rute protejate. JWT vă permite să mențineți un mecanism de autentificare fără statel, care este deosebit de util pentru scalarea API-urilor. Cu această configurare, puteți personaliza în continuare logica de autentificare a aplicației dvs. și puteți integra caracteristici suplimentare, cum ar fi controlul accesului bazat pe roluri și token-uri de reîmprospătare pentru sesiuni de lungă durată.

Testați-vă abilitățile cu toate serviciile noastre de găzduire și beneficiați de 15% reducere!

Utilizați codul la finalizarea comenzii:

Skills