Изграждане на защитен 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 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
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. С тази настройка можете допълнително да персонализирате логиката на удостоверяване на вашето приложение и да интегрирате допълнителни функции, като например контрол на достъпа, базиран на роли, и токени за опресняване за дълготрайни сесии.