Для впровадження авторизації через 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