25

Як скинути та відновити пароль у Ларавел (Laravel) для кількох таблиць?

Скидання та відновлення пароля в Ларавел (Laravel) для кількох таблиць

Як виявилося, що документація Laravel про це замовчує чи дає дуже поверхове уявлення. Необхідність мати різні таблиці sql для аутентифікації наприклад одну для користувачів адміністрації, а іншу для відвідувачів сайту або веб-додатку (api) досить часто зустрічається. Скидання та відновлення пароля для цих таблиць у Laravel так само відповідно має бути передбачене.

У цьому посібнику будуть розглянуті методи для актуальних на сьогоднішній день версій Laravel 8 – 9.

Зіткнувшись із завданням по відновленню пароля для кількох таблиць у Ларавел (Laravel) нам довелося витратити багато часу на пошуки та вирішення цього завдання, як правило поради, які ми знаходили були або сильно застарілими або абсолютно неправильними. Навіть у добре відомій Laracasts на це питання нам не дали розумного пояснення.

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

Але вирішення цього завдання існує і воно виявилося простим. Ми хочемо поділитися ним з вами, щоб ви заощадили свій час і сили.

Потрібна початкова підготовка файлів

Ми припускаємо, що ви вже створили другу таблицю на основі запропонованої Laravel (users) у прикладі буде використовуватись таблиця з назвою (admins).

Якщо ви не створили модель то це необхідно зробити наприклад на основі існуючої (User), важливе зауваження ваша модель повинна включати всі простори імен і трейти (User). У прикладі ми використовуватимемо ім'я для моделі (Admin).

І окрему таблицю для тимчасового зберігання (Token), наприклад, на основі password_resets, у прикладі використовується назва admin_resets.

Відповідно необхідно заповнити хоча б одне поле таблиці (Admin) для роботи з ним на цьому початкова підготовка завершена.

Додавання guards, providers, passwords

Перейдіть у файл шляхом: config/auth.php

Знайдіть розділ (guards) та додайте:

Додавання guards у Laravel

Перейдіть до розділу (providers) і додайте такі записи:

Додавання providers у Laravel

Знайдіть розділ (passwords), тут будуть вказані таблиці для тимчасового зберігання (Token). Також можна вказати максимальний час після якого (Token) буде видалено, за замовчуванням (expire = 60 ) - одну годину.

Додавання password broker() у Laravel

Визначення маршрутів (routs) для скидання та відновлення пароля кількох таблиць у Ларавел (Laravel).

Для простоти використовуватиметься приклад взятий з документації Laravel.

Необхідно додати виклик методу (broker('admins')) у двох місцях коду він виділено. У параметр "broker" додати те ім'я, яке визначали у "passwords" у файлі (config/auth.php)

Визначення маршрутів Laravel 1
Визначення маршрутів Laravel 2
Визначення маршрутів Laravel 3
Визначення маршрутів Laravel 4
Визначення маршрутів Laravel 5

Визначення notification для вказівки посилання з листа (обов'язковий)

Notification дозволяє повністю перевизначати лист, який надходить на пошту під час скидання та відновлення пароля. І необхідний для вказівки на певний маршрут програми при натисканні кнопки з отриманого листа. Також спрощує роботу, якщо потрібно додати додаткові мови або редагувати шаблон листа.

Створюємо будь-який клас "Notification" командою приклад: php artisan make:notification RessetPasswordNotification Рекомендую просто скопіювати вміст класу: vendor/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php

Відповідно при цьому необхідно замінити:

Скидання та відновлення пароля ларавел (laravel) notification

На:

Скидання та відновлення пароля ларавел (laravel) notification 1

Важливо змінити маршрут, який ви визначили для другої таблиці. Знайдіть блок:

Скидання та відновлення пароля ларавел (laravel) notification 2

За умовчанням буде вести на "password.reset", але обов'язково його змініть на свій наприклад: "customer.password.reset"

Якщо вам потрібно змінити сам шаблон листа, знайдіть функцію з назвою: "buildMailMessage", за кнопку листа відповідає функція "action".

Тепер необхідно зробити виклик даного "notification" у моделі.

Додайте в блок простору імен рядок:

Скидання та відновлення пароля ларавел (laravel) notification 3

У цій же моделі визначте функцію виклику:

Скидання та відновлення пароля ларавел (laravel) notification 4

На цьому вся робота для скидання та відновлення пароля для кількох таблиць у ларавел (laravel) готова можна запускати тести.

Можливо на перший погляд все це виглядає складно, але щоб отримати надійний та якісний результат, необхідно добре постаратися.

За вашим бажанням ми можемо зробити цю та безліч інших робіт з розробки сайтів та програм на Ларавел (Laravel).

Автор: Юрий Лысенко