Laravel: автентифікація й авторизація
20 питань · ~20 хв · Версія v3.0
Увійдіть, щоб продовжити
Вхід і гарди, «запам'ятати мене», підтвердження пошти й пароля, гейти й політики, відповіді з повідомленням чи 404, Sanctum - питання всіх рівнів, від junior до lead.
- За спробу
- 20
- У пулі
- 52
- Проходжень
- 0
- Середній бал
- -
- Пройшли на 70%+
- -
Питання для підготовки
33 питанняСесії зберігають стан користувача між запитами. Laravel дає єдиний API поверх різних драйверів (file, cookie, database, redis), що налаштовуються в config/session.php.
session(['cart_id' => 42]); // записати
$id = session('cart_id'); // прочитати
$request->session()->forget('cart_id'); // видалити
session()->flush(); // очистити все
Для продакшену з кількома серверами зазвичай обирають redis або database, щоб сесія була спільною між інстансами.
Flash Data - дані, що живуть у сесії лише до наступного запиту й потім автоматично видаляються. Класичне застосування - повідомлення про результат дії після редиректу.
return redirect('/dashboard')->with('status', 'Профіль оновлено!');
@if (session('status'))
<div class="alert">{{ session('status') }}</div>
@endif
Під капотом - session()->flash('key', $value). Метод reflash() продовжує життя flash-даних ще на один запит.
- Stateful - сервер зберігає стан клієнта між запитами (наприклад, сесія у файлі/пам'яті конкретного інстансу). Тоді потрібна «липкість» (sticky sessions) або спільне сховище.
- Stateless - сервер не зберігає стану; кожен запит самодостатній і містить усе потрібне (наприклад, JWT/токен з даними автентифікації).
Stateful: сесія на сервері → потрібен спільний Redis/sticky LB
Stateless: токен у запиті → будь-який інстанс обробить запит
Stateless легше масштабувати горизонтально - інстанси взаємозамінні. У Laravel веб-частина зазвичай stateful (сесії в Redis), API - stateless (Sanctum-токени). Для масштабування цей стан виносять у спільні Redis/БД.
FormRequest - окремий клас, що містить правила валідації та авторизацію, виносячи їх із контролера.
class StorePostRequest extends FormRequest
{
public function authorize(): bool
{
return $this->user()->can('create', Post::class);
}
public function rules(): array
{
return ['title' => ['required', 'max:255']];
}
}
// $request - вже провалідовано
public function store(StorePostRequest $request)
{
Post::create($request->validated());
}
Переваги: тонкі контролери, перевикористання правил, метод prepareForValidation() для нормалізації вводу, власні повідомлення в messages().
2FA вимагає двох факторів: «що знаю» (пароль) + «що маю» (код із застосунку/SMS). Найпоширеніше - TOTP (Time-based One-Time Password) сумісно з Google Authenticator.
У Laravel найпростіше через Fortify, який має 2FA з коробки:
- генерація секрету й QR-коду для прив'язки;
- перевірка 6-значного коду при вході;
- одноразові recovery codes на випадок втрати пристрою.
// Fortify вмикає features:
Features::twoFactorAuthentication(['confirm' => true]),
Під капотом - пакет pragmarx/google2fa. Важливо: зберігати секрет зашифрованим, давати recovery-коди, за бажанням «запам'ятати пристрій».
Докладніше в документації: Двофакторна автентифікація (Fortify)
Прочитати - ще не значить знати
20 питань, по одному на екран, ~20 хв. Після завершення - розбір кожної помилки з посиланням на питання.