MVC 4 で SimpleMembership を使用してパスワードのリセット/変更を実装する方法に関する詳細な記事がここにあります。ダウンロード可能なソースコードも含まれています。
この例では、電子メールを使用して URL をユーザーに送信し、クリックしてパスワードをリセットします。これは、ユーザーの別の検証であるため、ユーザーが Web サイトで古いパスワードと新しいパスワードを直接入力するよりも安全です。これにより、誰かがユーザー パスワードを入手し、パスワードを変更してロックアウトするシナリオが緩和されます。これにより、ユーザーはパスワードを忘れた場合にパスワードをリセットすることもできます。
リンク付きのメールを送信するコードは次のようになります。
[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");
}
これにより、渡された ID としてトークンを受け入れる Web API へのリンクを含む電子メールが作成されます。リンクをクリックすると、このメソッドがヒットします。
[AllowAnonymous]
public ActionResult ResetPasswordConfirmation(string Id)
{
ResetPasswordConfirmModel model = new ResetPasswordConfirmModel() { Token = Id };
return View(model);
}
このアクションは、クエリ文字列からトークンを取得し、ユーザーが新しいパスワードを入力できるようにするビューに渡される ResetPasswordConfirmationModel にトークンを配置します。新しいパスワードは、正しく入力されていることを確認するために 2 回入力され、ページで検証されます。この情報を送信すると、実際にパスワードをリセットするこのアクションの POST バージョンに移動します。
[AllowAnonymous]
[HttpPost]
public ActionResult ResetPasswordConfirmation(ResetPasswordConfirmModel model)
{
if (WebSecurity.ResetPassword(model.Token, model.NewPassword))
{
return RedirectToAction("PasswordResetSuccess");
}
return RedirectToAction("PasswordResetFailure");
}