Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Новини 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

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

Коментарі

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

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

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

Filament v5.10.0
Новини 12 жовтня 2026

Filament v5.10.0: сітка в rich editor, скелетони таблиць і десятки виправлень

Вийшов Filament v5.10.0: елементи керування сіткою в rich editor, допоміжний контент для віджетів-графіків, скелетони завантаження таблиць, submitOnCompletion() для OneTimeCodeInput та багато виправлень авторизації, доступності й стану.

17
Laravel AI SDK на практиці
Новини 09 жовтня 2026

Laravel AI SDK на практиці: агент, що стоїть за There There

Фрік Ван дер Гертен розповідає, як у Spatie побудували AI-шар хелпдеска There There на Laravel AI SDK: клас агента, інструменти з типізованою JSON-схемою та делегування роботи звичайним domain-діям.

12

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

Bewort Нова
Сьогодні

AI-Driven PHP Developer

Розробник бекенду на PHP/Laravel для платформи охорони здоров'я (кредентиалінг, комплаєнс, стафінг, автоматизація робочих процесів). Завдання: проєктування REST API та масштабованої архітектури, робота з PostgreSQL, асинхронні черги (AWS SQS, RabbitMQ, Kafka), участь у AI-автоматизації та розробка краулерів. Вимоги: 4+ років бекенд або фулстек досвіду, сильний Laravel, продуктове мислення, англійська B2+.

Full Stack Developer (middle+)

Full Stack розробник розвиватиме та підтримуватиме вебпродукти FinTech-компанії: доопрацьовуватиме backend і frontend, функціонал особистого кабінету клієнта, інтеграції через REST API з платіжними та ідентифікаційними сервісами. Ключовий стек: PHP, Laravel, Vue.js (Vue Router, Pinia або Vuex), MySQL/PostgreSQL, Docker, Git. Вимоги: понад 3 роки комерційного Full Stack досвіду, робота з наявним кодом, участь у code review та розборі інцидентів.

Intobi Нова
Вчора

Full-Stack Developer PHP+Angular

Розробник повного стеку, який створює та підтримує функціонал на Angular (TypeScript) і PHP, проєктує й інтегрує REST/GraphQL API та оптимізує роботу з реляційними базами даних. Вимоги: досвід PHP 8+ з Laravel або Symfony, впевнене володіння Angular, RxJS і управлінням станом, знання MySQL/PostgreSQL, Git і CI/CD. Очікується активне використання AI-агентів (Claude Code) у щоденній роботі та участь у код-рев'ю.

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

Bagisto

bagisto/bagisto

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

28,228 v2.5.0 13 26

Lang

laravel-lang/lang

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

7,779 15.37.4 12