Изграждане на защитен 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
и необходимите методи:

използвайте Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements JWTSubject
{
публична функция getJWTIdentifier()
{
return $this->getKey();
}public function getJWTCustomClaims()
{
return [];
}
}

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

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

php artisan make:controller AuthController

В

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

използвайте App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
използвайте Illuminate\Support\Facades\Hash;
use Tymon\JWTAuth\Facades\JWTAuth;
class AuthController extends Controller
{
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);
}

публична функция login(Request $request)
{
$credentials = $request->only(’email’, ‘password’);

if (!$token = Auth::attempt($credentials)) {
върнете response()->json([‘error’ => ‘Invalid credentials’], 401);
}

return response()->json([‘token’ => $token]);
}

публична функция logout()
{
Auth::logout();

return response()->json([‘message’ => ‘Successfully logged out’]);
}

публична функция me()
{
return response()->json(Auth::user());
}
}

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

Добавете маршрути за удостоверяване в

routes/api.php
:

използвайте App\Http\Controllers\AuthController;

Route::post(‘register’,[AuthController::class, ‘register’]);
Route::post(‘login’,[AuthController::class, ‘login’]);
Route::post(‘logout’,[AuthController::class, ‘logout’])->middleware(‘auth:api’);
Route::get(‘me’,[AuthController::class, ‘me’])->middleware(‘auth:api’);

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

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

За да защитите други маршрути на API, можете да използвате междинния софтуер

auth:api
. Например, ако имате маршрут за ресурси за
публикации
:

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

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

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

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

  • Регистрирайте потребител:
    POST /api/register
    Content-Type: application/json{

    “name”: “John Doe”,
    “email”: “john@example.com”,
    “password”: “парола”,
    “password_confirmation”: “парола”
    }
  • Влезте в системата:
    POST /api/login
    Content-Type: application/json{

    “email”: “john@example.com”,
    “password”: “парола”
    }

    Това ще върне токен, който можете да използвате за удостоверяване на други заявки.

  • Достъп до защитен маршрут: За да получите достъп до защитен маршрут, например
    GET /api/me
    , включете токена в заглавието
    Authorization
    :
    Authorization: Носител

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

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

AuthController
:

публична функция 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