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

Коментарі

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

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

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

Laracon US 2026: відео першого дня вже доступне Рекомендовано
Новини 29 липня 2026

Laracon US 2026: відео першого дня вже доступне

У Бостоні стартував Laracon US 2026, і запис першого дня вже доступний. Головне з кейноуту: офіційний Laravel LSP для редакторів, Laravel Cloud деплоїть Hono, Flask, Go та Rails, Pest 5 із Tia Engine. Аарон Френсіс приєднався до команди Laravel.

Pest 5: Tia Engine, плагін для AI-агентів і evals для LLM
Новини 29 липня 2026

Pest 5: Tia Engine, плагін для AI-агентів і evals для LLM

На першому дні Laracon US 2026 Нуно Мадуро представив Pest 5. Головне - Tia Engine, що переганяє лише зачеплені змінами тести й скорочує десятихвилинний прогін до кількох секунд, плюс плагіни для AI-агентів, evals, PHPStan і Rector.

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

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

Middle PHP Developer

Middle PHP розробник для SaaS стартапу розробляє та оптимізує веб-додатки на Laravel, SQL/NoSQL, JavaScript та Bootstrap. Вимагається 3+ років досвіду з PHP/Laravel, глибоке розуміння баз даних, навички OOP та чистого коду. Повна віддаленість (часовий пояс Нью-Йорка), робота в швидкому стартап-середовищі з фокусом на масштабованість та якість кода.

PHP Developer

Senior PHP/Laravel розробник для створення та підтримки API-сервісів та систем інтеграції. Основні обов'язки: проектування partner-facing APIs, реалізація механізмів синхронізації даних у реальному часі, робота з REST API та вебхуками. Вимоги: 5+ років досвіду, експертиза PHP/Laravel, глибоке розуміння REST API, досвід з Git/CI-CD та AI-інструментами для розробки.

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

Senior Laravel Developer (EU based)

Розробка та підтримка frontend та backend компонентів хмарної платформи для управління житловим сектором на Vue.js та Laravel. Вимоги: 5+ років PHP/Laravel, 1+ рік Vue.js, англійська B2+. Обов'язки включають розробку функцій, вдосконалення адмін-панелі, виправлення дефектів та підтримку клієнтських імплементацій.

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

Bagisto

bagisto/bagisto

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

27,769 v2.4.8 12 15

Lang

laravel-lang/lang

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

7,779 15.33.1 8

Відео за темою