Как мне реализовать "Забыли пароль" в ASP.NET MVC?
Я использую стандартный SqlMembershipProvider, который поставляется с демо-версией ASP.NET MVC.
Я заинтересован в реализации ссылки "Забыли пароль" на моем сайте.
Каков правильный способ реализации этой функции? Должен ли я перезаписать пароль временным и отправить его по электронной почте на свой зарегистрированный адрес электронной почты?
Ответы
Ответ 1
Основываясь на характере приложения, Лучшая практика для забытого пароля должна быть в следующем порядке
- Разрешить пользователю проверять Секрет/Вопрос максимум на 3-5 попыток
- При успешной проверке отправьте электронное письмо с случайным сгенерированным паролем со сроком действия 24 часа.
- Электронная почта должна содержать только пароль, но не имя пользователя и пароль.
- Когда пользователь входит в систему с временным паролем, перед переходом на домашнюю страницу пользователь должен быть вынужден создать новый пароль.
Ответ 2
Поставщик автоматически выполнит reset для вас:
http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.resetpassword.aspx
Образец просто возвращает новый пароль в браузер вместо отправки по электронной почте пользователю, но использует секретный вопрос/ответ, который можно настроить с помощью провайдера.
Этот образец получает пароль и отправляет его по электронной почте:
http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.getpassword.aspx
Я думаю, что любой подход безопасен. По электронной почте это шаг немного безопаснее, так как пользователю нужно будет узнать вопрос/ответ и пароль по электронной почте, чтобы взломать учетную запись.
Я понимаю, что эти образцы не используют MVC, но я уверен, что этого достаточно, чтобы вы начали.:)
Ответ 3
По правде говоря, лучше направить пользователю ссылку с каким-то невозможным угадать URL (скажем, с помощью случайного Guid. Когда пользователь нажимает на URL-адрес, он может reset пароль. URL-адрес должен быть полезен для один используется только и должен истекать через заданное время.
Ответ 4
Это зависит от того, какой тип поставщика членства вы используете.
Но я рекомендую использовать простой поставщик членства для аутентификации для более подробной информации.
перейдите по следующей ссылке
Вот вам какой-то код
[HttpPost]
[AllowAnonymous]
public ActionResult ForgotPassword(ForgotPasswordModel model)
{
.
.
.
.
if (WebSecurity.UserExists(model.UserName))
{
var token = WebSecurity.GeneratePasswordResetToken(model.UserName, 60);
.
.
.
.
// send this token by email
}
else
{
ModelState.AddModelError("", "Could not find User");
}
}
return View(model);
}
[HttpPost]
public ActionResult ResetPassword( ResetPasswordModel model)
{
string token = Request.Params["token"];
if (!string.IsNullOrEmpty(token))
{
if (WebSecurity.ResetPassword(token, model.NewPassword))
{
// send email…….. or
return View();
}
}