Изграждане на защитен API на Laravel с JWT удостоверяване ⋆ ALexHost SRL

Изпробвайте уменията си за всички наши хостинг услуги и получете 15% отстъпка!

Използвайте код на касата:

Skills
06.12.2024

Изграждане на защитен API на Laravel с JWT удостоверяване

Когато изграждате API с Laravel, осигуряването на сигурна автентикация е от решаващо значение, особено при работа с потребителски данни. Уеб токените JSON (JWT) предлагат надежден метод за обработка на удостоверяването в приложения без състояние, като позволяват сигурно предаване на потребителска информация между страните. Това ръководство ще ви преведе през процеса на изграждане на сигурен API на Laravel с помощта на JWT удостоверяване.

Предварителни условия

  • Основни познания за PHP и Laravel.
  • Инсталирана Laravel на вашия компютър (за предпочитане Laravel 9 или по-нова версия).
  • Инсталиран Composer.
  • MySQL или друга база данни, създадена за вашето приложение.

Стъпка 1: Създаване на нов проект Laravel

Първо създайте нов проект Laravel с помощта на Composer:

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

Навигирайте до директорията на проекта:

cd laravel-jwt-api

Стъпка 2: Инсталиране на пакета за удостоверяване на JWT

Най-често използваният пакет за JWT удостоверяване в Laravel е tymon/jwt-auth. Инсталирайте го, като използвате Composer:

composer require tymon/jwt-auth

След инсталирането на пакета публикувайте конфигурацията на JWT:

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

Това ще създаде файл config/jwt.php във вашия проект.

Стъпка 3: Генериране на секретен ключ JWT

Генерирайте секретен ключ, който JWT ще използва за подписване на токени:

php artisan jwt:secret

Това ще добави запис JWT_SECRET към вашия .env файл, който се използва за кодиране и декодиране на токените.

Стъпка 4: Настройка на удостоверяването

За да настроите JWT удостоверяването, трябва да конфигурирате охраната по подразбиране за вашия API. Актуализирайте файла config/auth.php, както следва:

'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
Това указва на Laravel да използва jwt драйвера за API заявките и да се удостоверява спрямо доставчика users.

Стъпка 5: Създаване на модела на потребителя и миграция

Ако все още не сте създали модел на потребител, можете да го създадете заедно с файла за миграция:

php artisan make:model User -m

Отворете създадения миграционен файл в database/migrations/ и добавете необходимите полета, като име, имейл и парола:

публична функция up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->timestamps();
});
}

Изпълнете миграцията, за да създадете таблицата users:

php artisan migrate

Стъпка 6: Имплементиране на JWT методите в потребителския модел

В модела User(app/Models/User.php) имплементирайте интерфейса JWTSubject и необходимите методи:

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 [];
}
}

Стъпка 7: Създаване на контролери за удостоверяване

Създайте контролер за обработка на удостоверяването на потребителите:

php artisan make:controller AuthController

В AuthController.php добавете методи за регистриране на потребител, влизане и излизане от системата:

<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Tymon\JWTAuth\Facades\JWTAuth;
class AuthController extends Controller
{
// User Registration
public function register(Request $request)
{
$request->validate([
'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);
}
// User Login
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (!$token = Auth::attempt($credentials)) {
return response()->json(['error' => 'Invalid credentials'], 401);
}
return response()->json(['token' => $token]);
}
// Logout User (Invalidate Token)
public function logout()
{
Auth::logout();
return response()->json(['message' => 'Successfully logged out']);
}
// Get Authenticated User
public function me()
{
return response()->json(Auth::user());
}
}

Стъпка 8: Дефиниране на маршрути на API

Добавете маршрути за удостоверяване в 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']);
// Protected routes (require JWT token)
Route::middleware('auth:api')->group(function () {
Route::post('logout', [AuthController::class, 'logout']);
Route::get('me', [AuthController::class, 'me']);
});

Тези маршрути обработват регистрацията на потребителя, влизането, излизането и извличането на удостоверения потребител.

Стъпка 9: Защита на маршрутите на API

За да защитите други маршрути на API, можете да използвате междинния софтуер auth:api. Например, ако имате маршрут за ресурси за публикации:

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

Това гарантира, че само автентифицирани потребители имат достъп до тези маршрути.

Стъпка 10: Тестване на API

Можете да тествате своя API с помощта на инструменти като Postman или cURL.

  • Регистрирайте потребител:
    POST /api/register
    Host: your-domain.com
    Content-Type: application/json
    {
    "name": "John Doe",
    "email": "john@example.com",
    "password": "password",
    "password_confirmation": "password"
    }
  • Влезте в системата:
    POST /api/login
    Host: your-domain.com
    Content-Type: application/json
    {
    "email": "john@example.com",
    "password": "password"
    }
    Това ще върне токен, който можете да използвате за удостоверяване на други заявки.
  • Достъп до защитен маршрут: За да получите достъп до защитен маршрут, например GET /api/me, включете токена в заглавието Authorization:
    Authorization: Носител

Стъпка 11: Опресняване на JWT токените (по избор)

За опресняване на токена можете да добавите метод в AuthController:

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

Добавете маршрута за обновяване:

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

Заключение

Следвайки това ръководство, вие създадохте защитен API на Laravel с JWT удостоверяване, което позволява регистрация на потребители, влизане и достъп до защитени маршрути. JWT ви позволява да поддържате механизъм за удостоверяване без състояние, което е особено полезно за мащабиране на API. С тази настройка можете допълнително да персонализирате логиката на удостоверяване на вашето приложение и да интегрирате допълнителни функции, като например контрол на достъпа въз основа на роли и токени за опресняване за дълготрайни сесии.

Изпробвайте уменията си за всички наши хостинг услуги и получете 15% отстъпка!

Използвайте код на касата:

Skills