Створення безпечного API Laravel з аутентифікацією JWT ⋆ ALexHost SRL

Перевірте свої навички на всіх наших хостингових послугах та отримайте знижку 15%!

Використовуйте код під час оформлення замовлення:

Skills
06.12.2024

Створення безпечного API Laravel з аутентифікацією JWT

При створенні API за допомогою Laravel, забезпечення безпечної автентифікації має вирішальне значення, особливо при роботі з даними користувача. JSON Web Tokens (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

Відкрийте створений файл міграції в

базі даних/migrations/
і додайте необхідні поля, такі як
ім'я
,
електронна пошта
та
пароль
:

public function 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 в модель користувача

У моделі

користувача
(app/Models/User.php)
реалізуйте інтерфейс
JWTSubject
і необхідні методи:

використати Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements JWTSubject
{
public function getJWTIdentifier()
{
return $this->getKey();
}public function getJWTCustomClaims()
{
return [];
}
}

Крок 7: Створення контролерів автентифікації

Створіть контролер для обробки автентифікації користувачів:

php artisan make:controller AuthController

В

AuthController.php
додайте методи для реєстрації користувача, входу та виходу з системи:

use App\Models\User;
використати Illuminate\Http\Request;
використати 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);
}

public function login(Request $request)
{
$credentials = $request->only(’email’, ‘password’);

if (!$token = Auth::attempt($credentials)) {
return response()->json([‘error’ => ‘Невірні облікові дані’], 401);
}

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

public function logout()
{
Auth::logout();

return response()->json([‘message’ => ‘Успішно вийшли з системи’]);
}

public function 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”,
    “password_confirmation”: “password”
    }
  • Увійдіть:
    POST /api/login
    Content-Type: application/json{

    “email”: “john@example.com”,
    “password”: “password”
    }

    Це поверне токен, який ви можете використовувати для автентифікації інших запитів.

  • Доступ за захищеним маршрутом:Щоб отримати доступ за захищеним маршрутом, наприклад,
    GET /api/me
    , додайте токен до заголовка
    авторизації
    :
    Авторизація: Пред'явник <токен>

Крок 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