パスワードのリセット機能を実装しようとしています。これは、システムにログインしていない、またはログインできないユーザー向けです。私は近いと思いますが、それは正しくありません:
私は ResetPassword メソッド/ビューを持っています...それは単にユーザーの電子メールアドレスを要求し、ユーザーにアカウントを確認しませんが、存在する場合はリンクとトークンを含む電子メールを送信します。それはすべてうまくいきます。
次の部分は私の質問がある場所です....この方法でパスワードトークンを受け取ります(ユーザーの電子メールリンクをクリックすることにより):
[HttpGet]
public ActionResult ReceiveResetToken(string token)
{
try
{
if (!String.IsNullOrEmpty(token))
{
var username = (from u in db.Users
where u.Userid == WebSecurity.GetUserIdFromPasswordResetToken(token)
select u.Email).ToString();
if (!String.IsNullOrEmpty(username))
{
WebSecurity.ConfirmAccount(token);
}
}
RedirectToAction("Index", "Home");
}
catch (Exception)
{
throw;
}
}
ここで明らかな何かが欠けています。私はそれを再考し続けているため、方法は完全ではありません...ユーザー名を取得し、アカウントを確認し、パスワードが何であるかを知らずにログインし、パスワード変更ページにリダイレクトしますか? 気分が悪い。
それで、ViewBag を使用して非表示のユーザー名を変更ダイアログに渡すのではないかと考えました...どちらも正しくありません。よりエレガントなアプローチが必要です。トークンを受け取り、ユーザー名に新しいパスワードを要求し、db を更新してログインします。パスワード リセット トークンを受け取るパターンは何ですか?
編集 - - - -
答えを探し続けていると、この小さな宝石に出会いました。どうやら、トークンと新しいパスワードを受け入れる WebSecurity.ResetPassword メソッドがあるようです。これは正しいパスのように感じます。ログインについて心配する必要はありません。変更してログインにリダイレクトするだけです...コードを完成させて解決策を投稿します。
誰かが私が正しい道を進んでいることを確認したり、パターンにエレガンスを追加することについて考えを投稿したりできれば、それは素晴らしいことです