Как в 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. Т.е. мне надо просто создать новый класс, реализующий указанный интерфейс. Но как Ларавелю указать, что теперь будет использоваться новый класс?
Нужно полностью подменять механизм сброса пароля своей реализацией или найти готовую (которая на самом деле сделает то же самое).
Вот сервис, отвечающий за работу этого механизма — делаешь свою реализацию PasswordBrokerManager со всеми сопутствующими классами — PasswordBroker и TokenRepositoryInterface, подменяешь и пользуешься.
JhaoDa, Спасибо.
Видимо, Вы правы ((
Пришлось переопределять все указанные классы, и все ради одного значения, которое можно было бы и в конфиг вынести ))
Если других ответов не последует, Ваш засчитаю решением.
JhaoDa, вынести в конфиг название поля, которое является обязательным для юзеров, по которому и идентифицируем пользователя в password_resets (email, номер телефона, логин - что угодно). И по этому полю все операции и проводить. И не надо было бы заниматься всем этим извращением - переопределять классы...
Ну, это я так, в качестве бубнежа в адрес Тэйлора.