C'è un articolo dettagliato su how to implement password reset/change with SimpleMembership in MVC 4 here. Include anche il codice sorgente che puoi scaricare.
Questo esempio utilizza la posta elettronica per inviare un URL all'utente per fare clic su per reimpostare la password. Questo è più sicuro del semplice fatto che l'utente inserisca la vecchia password e la nuova password direttamente sul sito Web perché è un'altra verifica dell'utente. Questo allevia lo scenario in cui qualcuno ottiene una sospensione della password dell'utente e la blocca cambiando la password. Ciò consente inoltre all'utente di reimpostare la password nel caso in cui abbia dimenticato la password.
Il codice per inviare l'e-mail con il collegamento sarebbe simile a questo.
[AllowAnonymous]
[HttpPost]
public ActionResult ResetPassword(ResetPasswordModel model)
{
string emailAddress = WebSecurity.GetEmail(model.UserName);
if (!string.IsNullOrEmpty(emailAddress))
{
string confirmationToken =
WebSecurity.GeneratePasswordResetToken(model.UserName);
dynamic email = new Email("ChngPasswordEmail");
email.To = emailAddress;
email.UserName = model.UserName;
email.ConfirmationToken = confirmationToken;
email.Send();
return RedirectToAction("ResetPwStepTwo");
}
return RedirectToAction("InvalidUserName");
}
questo crea una e-mail che ha un collegamento a un API Web che accetta il token come l'id che viene passato. Quando si fa clic sul link che colpisce questo metodo.
[AllowAnonymous]
public ActionResult ResetPasswordConfirmation(string Id)
{
ResetPasswordConfirmModel model = new ResetPasswordConfirmModel() { Token = Id };
return View(model);
}
L'operazione ottiene il token dalla stringa di query e lo mette nel ResetPasswordConfirmationModel che viene passato alla vista, che permette all'utente di inserire la nuova password. La nuova password viene inserita due volte per assicurarsi che sia stata inserita correttamente, che è valida sulla pagina. Quando inviano queste informazioni vengono portati alla versione POST di questa azione che resetta effettivamente la password.
[AllowAnonymous]
[HttpPost]
public ActionResult ResetPasswordConfirmation(ResetPasswordConfirmModel model)
{
if (WebSecurity.ResetPassword(model.Token, model.NewPassword))
{
return RedirectToAction("PasswordResetSuccess");
}
return RedirectToAction("PasswordResetFailure");
}
fonte
2013-12-12 15:32:20
Non stai cercando una funzione di reimpostazione della password? Se l'utente non conosce la password originale, come si sono registrati? E se non sono connessi, quale password dell'utente cambieranno? – ProfK