Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Новини 11 липня 2026

Пакет Email Magic Link для Laravel: безпарольна автентифікація з підтримкою двофакторної перевірки

Пакет Email Magic Link для Laravel впроваджує безпарольну автентифікацію, дозволяючи користувачам входити в систему через посилання або одноразовий код, надісланий електронною поштою. Пакет працює як самостійно, так і в інтеграції з Laravel Fortify, не додаючи жодних додаткових залежностей крім самого фреймворку.

Основні можливості

Пакет пропонує гнучкий підхід до безпарольної автентифікації з наступними функціями:

  • Вхід через посилання, одноразовий код або обидва варіанти - налаштовується єдиним параметром mode
  • Посилання, захищені від сканерів - надісланий GET запит лише відображає сторінку підтвердження; токен споживається лише явним POST запитом
  • Безпечна передача до Fortify - користувачі з налаштованим TOTP перенаправляються на двофакторну перевірку перед автентифікацією, уникаючи обходу додаткового фактору захисту
  • Хешовані токени в базі даних - використовується HMAC-SHA256 з ключем, одноразове споживання та блокування після перевищення спроб для кожного токена
  • API для створення власних посилань та кодів - дозволяє надсилати їх через SMS, push-повідомлення або власні поштові шаблони
  • Обмеження повторних надсилань - ескалаційні затримки та погодинний ліміт
  • JSON відповіді для SPA та мобільних клієнтів, можливість входу через альтернативні guard'и на зразок admin

Захист від поштових сканерів

Одна з головних проблем магічних посилань полягає в тому, що системи безпеки та поштові клієнти автоматично переходять за всіма URL-адресами в листах. Якщо клік по посиланню виконує GET запит, що споживає одноразовий токен, сканер може спалити його ще до того, як користувач побачить лист.

Email Magic Link розділяє процес на два етапи. GET запит за адресою /magic-link/verify/{token} лише відображає підписану сторінку підтвердження і нічого не змінює. Токен споживається виключно явним POST запитом з цієї сторінки, який сканер не здійснює.

Такий самий рівень захисту застосовується при зберіганні. Токени та коди ніколи не зберігаються у відкритому вигляді - зберігається лише хеш HMAC-SHA256 з ключем. Споживання використовує безгонкове умовне затвердження, відповіді на запити ідентичні незалежно від того, чи існує електронна адреса, а кожен токен має власне блокування від перебору (max_attempts_per_token, за замовчуванням 5).

Передача до двофакторної автентифікації Fortify

Якщо користувач підтвердив TOTP через Fortify, перевірка його магічного посилання не виконує вхід в систему. Замість цього він перенаправляється на двофакторну перевірку Fortify без автентифікації, тому немає шляху, який би дозволив обійти другий фактор простим кліком по посиланню.

Для SPA та мобільних клієнтів встановіть api.enabled у true, і endpoints повертатимуть JSON, який повідомляє про результат:

{ "authenticated": false, "two_factor": true, "redirect": "<challenge url>" }

Самостійне створення посилань та кодів

Facade дозволяє створювати облікові дані без їх надсилання, що корисно при доставці через SMS, push-повідомлення або власний mailable:

use EmailMagicLink\Facades\EmailMagicLink;
$link = EmailMagicLink::issueLink($user);
$link->url;              // Підписаний URL підтвердження
$link->expiresAt;        // Екземпляр Carbon
$link->expiresInMinutes;
$code = EmailMagicLink::issueCode($user);
$code->code;
$code->expiresAt;

Ви також можете безпосередньо впроваджувати контракт EmailMagicLink\Contracts\MagicLinkIssuer. Переприв'язування MagicLinkAuthenticator дозволяє контролювати поведінку після перевірки, а реалізація контракту CaptchaGuard додає CAPTCHA до форми запиту.

Обмеження повторних надсилань

Безпарольні процеси спонукають користувачів активно натискати кнопку повторного надсилання. Вбудований ResendGuard застосовує ескалаційні затримки (30 секунд, потім 60, потім 120) плюс ковзний ліміт у п'ять надсилань на годину. Ви можете повторно використовувати його у власних контролерах:

use EmailMagicLink\Contracts\ResendGuard;
public function resend(Request $request): Response
{
$decision = $this->guard->attempt('custom-key');
if (! $decision->allowed) {
return back()->with('retry_after', $decision->retryAfterSeconds);
}
// Надіслати лист…
}

Прострочені токени очищаються запланованою командою:

Schedule::command('email-magic-link:purge')->daily();

Встановлення та вимоги

Пакет вимагає PHP 8.4 та Laravel 13, Fortify є опціональним:

composer require pushery/email-magic-link-for-laravel
php artisan email-magic-link:install
php artisan migrate

Інструкції з встановлення та повну документацію можна знайти на GitHub.

5

Читати в документації

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

PayZephyr
Новини 12 вересня 2026

PayZephyr: Єдиний API для роботи з Stripe, Paystack та PayPal

PayZephyr - Laravel-пакет від Nwaneri Chukwunyere Kenneth, який об'єднує вісім платіжних провайдерів під одним зручним API. Підтримує автоматичне перемикання, захист від подвійної оплати, підписки та повернення коштів.

2
Laravel Telescope
Новини 11 вересня 2026

Artisan-команди для дебагу в Laravel Telescope 5.24.0

Laravel Telescope 5.24.0 додає дві нові Artisan-команди для роботи із записами із терміналу. Тепер можна переглядати запити, винятки, джоби та запити до бази даних без відкриття веб-інтерфейсу, а також отримувати дані у форматі JSON для скриптів та AI-агентів.

3

Вакансії за темою

Full Stack Developer (PHP, React, Middle, Middle+)

Full Stack розробник для підтримки та розвитку аналітичного продукту перевірки контрагентів. Робота зі складною бізнес-логікою, базами даних та інтеграцією AI-рішень. Стек: PHP 8.x (Laravel/Symfony), React, MySQL, REST API. Вимоги: 3+ років комерційного досвіду, глибоке розуміння SQL, Git, Docker, CI/CD, Linux, OWASP.

Програміст PHP (інтерн)

Вакансія на посаду інтерна PHP розробника для початківців з теоретичною базою ООП та базовими знаннями PHP. Потрібні навички Git/GitHub, власні проєкти. Стажування в офісі під керівництвом менторів з перспективою переходу на посаду Junior разробника.

Starlight Media Нова
2 дні тому

Senior Full-Stack Developer (PHP, Go, Vue.js)

Senior Full-Stack розробник для розвитку та підтримки веб-платформ. Основні завдання: розробка на PHP (Yii2, Laravel), Go, Vue.js, MySQL оптимізація, REST API, рефакторинг коду. Вимоги: 3+ років досвіду, PHP 8.x ООП, досвід Go або готовність його розвивати, JavaScript ES6+, Git, Docker, англійська B1-B2.

Пакети за темою

Bagisto

bagisto/bagisto

Bagisto — це платформа для електронної комерції, побудована на Laravel. Вона надає готове рішення для створення та управління інтернет-магазинами з підтримкою каталогу товарів, замовлень, платежів та клієнтів.

28,086 v2.5.0-beta1 13 25

Lang

laravel-lang/lang

Список 126 мов для Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark та Laravel UI.

7,774 15.34.8 11