Генерируйте временный URL для изменения пароля

Я надеюсь реализовать опцию Forgot Password на своем веб-сайте. Мне нравится опция, где электронное письмо, содержащее временный одноразовый URL использования, который истекает через какое-то время, послано пользователю.

Я посмотрел на следующие страницы для получения этих идей, но я не уверен, как реализовать это использование ASP.NET и C#. Как один из пользователей указал, если я могу реализовать это, не храня эту информацию в базе данных, которая будет идеальна. Советуйте.

Сброс пароля путем пользования электронной почтой временных паролей

Спасибо.

28
задан Community 23 May 2017 в 12:17
поделиться

4 ответа

В зависимости от ваших потребностей, вы можете зашифровать информацию в формате, похожем на следующий формат

(UserId)-(ExpireDate)

Шифруйте данные, сделайте эту ссылку, затем расшифруйте данные и действуйте оттуда....

Грубые, но, скорее всего, пригодные для использования и не требующие использования БД

.
-5
ответ дан 28 November 2019 в 02:48
поделиться

Вероятно, самым простым способом будет модификация вашей таблицы пользователей для добавления 2 дополнительных столбцов, ИЛИ если вы не хотите модифицировать существующую таблицу, вы можете добавить новую зависимую таблицу под названием "UserPasswordReset" или что-то в этом роде. Столбцы выглядят следующим образом:

PasswordResetToken UNIQUEIDENTIFIER,
PasswordResetExpiration DATETIME

Если вы используете дополнительный маршрут таблицы, вы можете также добавить колонку UserID, сделать ее первичным ключом и ссылку на ключ foriegn обратно в вашу таблицу пользователей. Также рекомендуется ограничение UNIQUE. Затем вы просто используете в качестве токена руководство в вашем приложении asp.net.

Поток может быть примерно таким:

  1. Пользователь запрашивает сброс пароля для своей учетной записи
  2. Вы вставляете новую запись в таблицу (или обновляете свою пользовательскую запись), устанавливая параметр PasswordResetExpiration на дату в будущем (DateTime. Now.AddDays(1)), и установите маркер в Guid.NewGuid()
  3. Направьте пользователю ссылку на вашу страницу ResetPassword.aspx со ссылкой в строке запроса (http://www.yoursite.com/ResetPassword.aspx?token=Guid-here)
  4. Используйте страницу ResetPassword.aspx для проверки подлинности маркера и полей истечения срока действия. (Т.е. убедитесь, что DateTime.Now < PasswordResetExpiration)
  5. Предоставьте простую форму, которая позволит пользователю сбросить этот пароль.

Я знаю, что вы хотели избежать изменения базы данных, но на самом деле это, пожалуй, самый простой метод.

.
67
ответ дан 28 November 2019 в 02:48
поделиться

Здесь класс System.Guid в вашем друге, так как он сгенерирует уникальное (ну, достаточно уникальное) 128-битное число:

  • Сгенерируйте новый Guid ( System.Guid.NewGuid() )
  • Храните этот Guid где-нибудь (Может быть, объект приложения? )
  • Отправьте пользовательский URL в email с этим Guid
  • Когда пользователь зайдет на сайт, заставьте его ввести пароль, который вы прислали по email
  • Если пароли совпадают, заставьте его ввести новый пароль
1
ответ дан 28 November 2019 в 02:48
поделиться

Я использовал Хэшинг-класс для создания уникальных автоматических входов, состоящих из текущей даты/времени и адреса электронной почты пользователей:

string strNow = DateTime.Now.ToString();
string strHash = strNow + strEmail;
strHash = Hash.GetHash(strHash, Hash.HashType.SHA1);

получить Хэшинг-класс от: http://www.developerfusion.com/code/4601/create-hashes-md5-sha1-sha256-sha384-sha512/

Затем просто взять его из URL, используя:

if (Request.QueryString["hash"] != null)
{
                //extract Hash from the URL
                string strHash = Request.QueryString["hash"];
}
1
ответ дан 28 November 2019 в 02:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: