2016-03-24 5 views
1

У меня есть сценарий, в котором, когда пользователь хочет сбросить пароль, системе будет отправляться временный случайный сгенерированный пароль пользователю по электронной почте. Я попытался сохранить временный пароль в новый столбец базы данных, но я не совсем уверен, работает ли этот подход. Некоторые люди рекомендуют использовать token такие, как показано ниже:C# ASP.NET Identity

string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id); 

Однако я действительно новичок в ASP.NET и я не знаком с token. Как сравнить временно созданный token с token в базе данных?

Другой метод, который я нашел, чтобы осуществить это, чтобы иметь Membership.GeneratePassword функцию, которая генерирует случайную строку символов:

model.temppwd = Membership.GeneratePassword(10, 1); 

Может кто-нибудь предоставить мне идеальный способ реализации этой функции с некоторым примером? Спасибо!

+2

http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity –

+0

На самом деле шаблон проекта ASP.NET Web Application содержит полная реализация –

+1

@Joe вам ничего не нужно хранить. Токен * не * временный пароль и * вы * не должны хранить его в любом месте. Это заботится об идентификаторе ASP.NET точно так же, как и пароль пользователя/пароль. В шаблоне проекта ASP.NET MVC вы увидите, что AccountController имеет метод ResetPassword, который вызывает «var result = wait UserManager.ResetPasswordAsync (user.Id, model.Code, model.Password)», где 'model.Code' является токен, введенный пользователем либо напрямую, либо по ссылке –

ответ

0

В нашем проекте мы использовали

Guid.NewGuid(); и отправил письмо, содержащее ссылку на восстановления пароля действия (MVC) в виде строки запроса: https://yoursite.com/account/reset/?code=your_guid_code

Пример:

ResetPassword resetPassword = new resetPassword(); resetPassword.Code = Guid.NewGuid(); string strLink = string.Format("{0}", actionUrl + "?code="+ resetPassword.Code);

И теперь вы можете использовать strLink для отправки по электронной почте. Вам нужно будет хранить Guid в таблице базы данных вместе с userId, чтобы вы могли реализовать процедуру сброса. Когда пользователь нажимает на ссылку из вашего электронного письма, он получит форму/представление, в котором запрашивается новый пароль. Также вы захотите добавить дополнительный столбец в эту таблицу, чтобы предоставить лимит срока действия для этого кода. Если пользователь нажимает на ссылку в электронном письме, и срок действия кода истек, вам нужно будет сообщить об этом пользователю и отправить другое электронное письмо с другим кодом.

+0

Спасибо за ответ, можно ли каким-либо образом реализовать его, предоставив пользователю случайный пароль для входа пользователя и изменения пароля? – Joe

+0

Я думаю, это добавляет еще один шаг. Конечно, вы можете предоставить случайный пароль, но это не очень полезно, так как в любом случае ему придется его менять. Вместо этого вы можете добавить логическое свойство в свой класс/модель, например «MustChangePasswordOnLogin», и установить значение true, когда приложение отправляет электронное письмо. Когда пользователь идет по ссылке в электронном письме, проверьте свойство. Если это неверно, значит, он случайно щелкнул его снова, поэтому загрузите представление по умолчанию. После того, как пользователь изменит свой пароль, установите для свойства значение false, и все готово, и вы можете повторно использовать эту схему при создании новых учетных записей. –