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

Как оказалось, что документация Laravel об этом умалчивает или даёт очень поверхностное представление. Необходимость иметь разные таблицы sql для аутентификации например одну для пользователей администрации, а другую для посетителей сайта или веб приложения (api) довольно таки часто встречается. Сброс и восстановление пароля для этих таблиц в Laravel так же соответственно должен быть предусмотрен.
В этом руководстве будут рассмотрены методы для актуальных на сегодняшний день версий Laravel 9 - 10.
Столкнувшись с задачей по восстановлению пароля для нескольких таблиц в Ларавел (Laravel) нам пришлось потратить много времени на поиски и решения этой задачи, как правило советы которые мы находили были или сильно устаревшими или абсолютно неправильными. Даже в хорошо известной Laracasts на этот вопрос нам не дали разумного объяснения.
Если аутентификация для множества таблиц в Laravel решается с помощью Guard то для сброса и восстановления пароля нужен другой подход.
Но решение этой задачи существует и оно оказалось простым. Мы хотим поделиться ним с вами, что бы вы сэкономили своё время и силы.
Необходимая начальная подготовка файлов
Мы предполагаем что вы уже создали вторую таблицу на основе предлагаемой Laravel (users) в примере будет использоваться таблица с названием (admins).
Если вы не создали модель то это необходимо сделать например на основе существующей (User), важное замечание ваша модель должна включать в себя все пространства имён и трейты (User). В примере мы будем использовать имя для модели (Admin).
И отдельную таблицу для временного хранения (Token) например на основе password_resets, в примере используется название admin_resets.
Соответственно необходимо заполнить хотя бы одно поле таблицы (Admin) для работы с ним на этом начальная подготовка завершена.
Добавление guards, providers, passwords
Перейдите в файл по пути: config/auth.php
Найдите раздел (guards) и добавьте:

Перейдите в раздел (providers) и добавьте следующие записи:

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

Определение маршрутов (routs) для сброса и восстановления пароля нескольких таблиц в Ларавел (Laravel).
Для простоты будет использоваться пример взятый из документации Laravel.
Необходимо добавить вызов метода (broker('admins')) в двух местах кода он выделен. В параметр "broker" добвить то имя которое определяли в "passwords" в файле (config/auth.php)





Определение notification для указания ссылки из письма (обязателен)
Notification позволяет полностью переопределять письмо, которое приходит на почту при сбросе и восстановлении пароля. И необходим для указания ссылки на определённый маршрут приложения при нажатии кнопки из полученного письма. Так же упрощает работу если нужно добавить дополнительные языки или редактировать шаблон письма.
Создаём любой класс "Notification" командой пример: php artisan make:notification RessetPasswordNotification Рекомендую просто скопировать содержимое класса: vendor/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php
Соответственно при этом необходимо заменить:

На:

Важно изменить маршрут на тот, который вы определили для второй таблицы. Найдите блок:

По умолчанию будет вести на "password.reset", но обязательно его измените на свой например: "customer.password.reset"
Если вам нужно изменить сам шаблон письма найдите функцию с названием: "buildMailMessage", за кнопку письма отвечает функция "action".
Теперь необходимо сделать вызов данного "notification" в модели.
Добавьте в блок пространства имён строку:

В этой же модели определите функцию с вызовом:

На этом вся работа для сброса и восстановления пароля для нескольких таблиц в ларавел (laravel) готова можно запускать тесты.
Возможно на первый взгляд всё это выглядит сложно, но чтобы получить надежный и качественный результат необходимо хорошо постараться.
При вашем желании мы можем сделать эту и множество других работ по разработке сайтов и приложений на Ларавел (Laravel).