Сброс пароля: как уведомить клиент что сервер дал «добро», если есть редирект?
Делаю сброс пароля. Вроде все понятно, но затык с таким моментом.
У меня приложение и сервер авторизации на разных доменах. Все понятно, кроме того как делать сброс.
Схема такая: юзер переходит по ссылке в письме, в ссылке домен типо
https://api.example.com/verify?token=blah
Потом сервер проверяет токен на соответствие и редиректит на, допустим
https://example.com/new-password
Где по идее как бы форма ввода нового пароля. И я так полагаю надо будет на отдельный урл отправлять пост нового пароля.
А как это все соединить-то?
1. Когда удалять пароль из базы? При верификации токена из мейла, или уже после получения нового пароля? Между тими действиями может пройти много времени (например, юзер пошел пить чай после того как клацнул по ссылке из имейла).
2. Если удалять пароль еще до ввода нового, то получится ситуация, что у меня полностью активный, рабочий юзер БЕЗ пароля. Это как вообще?
3. Как уведомить клиент, что он уполномочен вообще отсылать новый пароль? И наоборот - как на сервере узнать что клиент уполномочен присылать пароль?
Когда получишь новый пароль от пользователя. Если он пошёл пить чай, то это его проблема, если токен успеет протухнуть, то пусть вновь отправляет запрос на изменение пароля.
Токен, который ты шлёшь на емэил должен быть вместо логина-пароля, только доступ с этим токеном должен быть только для смены пароля и не на йоту больше. Все остальные действия и проверки проводи так же, как будто это обычный пользователь меняет пароль.
Я делал так:
1. Пользователь заходит на /User/PassReset, где вводит свой адрес эл. почты
2. Система генерирует токен x на сброс, пишет его в таблицу пользователей в отдельное поле (токен нельзя использовать вместо пароля)
3. Отправляется письмо со со ссылкой /User/PassReset?user=u?token=x пользователю
4. При переходе по ссылке, система проверяет токен и пользователя, если всё совпало, предлагает ввести новый пароль
5. Новый пароль хэшируется и пишется в базу вместо старого, пользователю отправляется уведомление о том, что пароль изменился.