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

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

Коментарі

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

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

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

Новини 27 жовтня 2026

Filament v5.11.0: поля й віджети на React, Vue і Svelte та жорсткіший захист Livewire

Filament v5.11.0 дозволяє писати власні поля форм, компоненти схем і віджети на React, Vue, Svelte або чистому JavaScript. Паралельно v5.11.0 і v4.16.0 закривають для клієнта внутрішні Livewire-методи та стан і додають опційні ліміти для репітерів і пагінації таблиць.

2
Новини 27 жовтня 2026

Livewire 4.4.8 закриває обхід #[Authorize], а NativePHP Mobile - сім вразливостей

Livewire 4.4.8 виправляє GHSA-mhf7-xp6r-6qrc (CVSS 6.5): атрибут #[Authorize] можна було обійти й виконати дію над чужим записом. Того ж тижня NativePHP опублікувала сім попереджень для NativePHP for Mobile - виправлення в nativephp/mobile 4.6.1 і 3.3.11, але до користувачів вони дійдуть лише з новою збіркою застосунку.

1

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

Middle Backend Engineer PHP/Laravel

Розробка бекенду для нової платформи запису й редагування відео з AI: REST API для керування контентом (S3-завантаження, метадані, мініатюри, планування), оркестрація задач обробки відео на AI-воркерах RunPod, інтеграції з платежами, аналітикою та AI-сервісами, WebSocket-синхронізація з клієнтами та фонові черги. Потрібен досвід із бекенд-фреймворками, проєктуванням баз даних, автентифікацією й безпекою API, роботою з вебхуками та Docker, Git і CI/CD.

Senior/Middle PHP Developer

Підтримка та розвиток великих веб-сайтів компанії (понад 1 млн відвідувань на місяць) на Laravel та OctoberCMS, інтеграція з внутрішніми системами та платіжними шлюзами (Приват24, Portmone, EasyPay, LiqPay), оптимізація продуктивності та робота з великим legacy-кодом без ризику для продакшену. Потрібен досвід PHP від 4 років, впевнена робота з Laravel і OctoberCMS, знання HTML5, CSS3 та JavaScript, вища освіта.

SoftHouseGroup Нова
2 дні тому

PHP Software Engineer

Розробник буде частиною full-stack команди, яка розвиває велику складну систему у страховому домені з багатьма модулями та інтеграціями з платіжними провайдерами. Щодня потрібні розробка нових модулів, підтримка існуючих, виправлення багів та перевірка коду, згенерованого AI. Ключові вимоги: понад 4 роки досвіду PHP, Laravel або Yii2, знання ООП і патернів проєктування, MySQL, REST API, фронтенд (HTML, CSS, JavaScript, jQuery, Vue.js), Git і англійська на рівні Pre-Intermediate для читання.

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

Kalimera

welldigit/kalimera

Interactive installer that scaffolds Laravel applications the Well Digit way.

v1.0.0 15

Bagisto

bagisto/bagisto

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

28,282 v2.5.0 13 26