Впровадження авторизації через Sanctum у Laravel 12

Для впровадження авторизації через Sanctum у Laravel, спершу необхідно встановити та налаштувати Sanctum. Для цього використовуємо команду:

composer require laravel/sanctum

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

php artisan migrate

Далі, створюємо 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']);

// Захищені маршрути (Потрібен токен)
Route::middleware('auth:sanctum')->group(function () {
Route::post('/logout', [AuthController::class, 'logout']);
});

Після цього створюємо контролер AuthController:

php artisan make:controller AuthController

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

php
public function register(Request $request) {
$request->validate([
'name' => 'required|string|max:255',
'email' => 'required|string|email|unique:users',
'password' => 'required|string|min:8|confirmed',
]);

$user = User::create([
    'name' => $request->name,
    'email' => $request->email,
    'password' => Hash::make($request->password),
]);

return response()->json([
    'message' => 'Користувача зареєстровано успішно!',
    'user' => $user,
], 201);

}

public function login(Request $request) {
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);

$user = User::where('email', $request->email)->first();

if (!$user || !Hash::check($request->password, $user->password)) {
    throw ValidationException::withMessages([
        'email' => ['Невірні дані для входу.'],
    ]);
}

$token = $user->createToken('api-token')->plainTextToken;

return response()->json([
    'message' => 'Вхід успішний!',
    'token' => $token,
]);

}

public function logout(Request $request) {
$request->user()->currentAccessToken()->delete();

return response()->json([
    'message' => 'Вихід успішний!',
]);

}

Після цього можна протестувати API маршрути. Для реєстрації користувача надаємо такі дані:

{
"name": "John Doe",
"email": "[email protected]",
"password": "password123",
"password_confirmation": "password123"
}

Відповідь буде:

{
"message": "Користувача зареєстровано успішно!",
"user": { "id": 1, "name": "John Doe", "email": "[email protected]" }
}

Для входу:

{
"email": "[email protected]",
"password": "password123"
}

Відповідь:

{
"message": "Вхід успішний!",
"token": "1|AbCdEfGhIjKlMnOpQrStUvWxYz"
}

Для виходу необхідно вказати токен в заголовках:

Authorization: Bearer 1|AbCdEfGhIjKlMnOpQrStUvWxYz

Відповідь:

{ "message": "Вихід успішний!" }

Не соромтесь задавати питання, якщо щось незрозуміло!

Перекладено з: Implement Authorization through Sanctum in Laravel 12