@SVZhidkow
Бэкенд-разработчик

Как в Laravel сбросить пароль пользователя, если у него отсутствует email?

В Laravel есть стандартная не плохо работающая система сброса пароля. Но она жестко привязана к email юзера. В таблице password_resets токен связан именно с email.

На одном моем проекте заказчик принципиально отказался от обязательного email для пользователей, обязателен там номер телефона (это его бизнес логика и она не обсуждается).

Авторизацию и регистрацию переписать не составило труда. Но вот с восстановлением пароля проблемы:

1. При запросе ссылки на восстановление пароля, приложение пытается записать в password_resets email, а его нет - выбрасывает исключение.
2. Но даже если отправить такую ссылку по смс, при переходе по ней и попытке ввести новый пароль - снова ошибка, т.к. запись в password_resets не найдена, токена, следовательно, тоже нет.

Т.е. вопрос по-сути в том, как переопределить идентификатор токена в таблице password_resets с email на номер телефона или id пользователя? Понятно, что можно просто переписать систему, но возможно, есть решения именно для Laravel?

Буду рад любой помощи!

UPD Параметры, отвечающие за то, какое именно свойство будет записано в таблицу password_resets и в какое именно поле, содержатся в классе Illuminate\Auth\Passwords\DatabaseTokenRepository, который имплементирует Illuminate\Auth\Passwords\TokenRepositoryInterface. Т.е. мне надо просто создать новый класс, реализующий указанный интерфейс. Но как Ларавелю указать, что теперь будет использоваться новый класс?
  • Вопрос задан
  • 1025 просмотров
Решения вопроса 1
JhaoDa
@JhaoDa
LaravelRUS Team
Нужно полностью подменять механизм сброса пароля своей реализацией или найти готовую (которая на самом деле сделает то же самое).

Вот сервис, отвечающий за работу этого механизма — делаешь свою реализацию PasswordBrokerManager со всеми сопутствующими классами — PasswordBroker и TokenRepositoryInterface, подменяешь и пользуешься.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы