1

パスワードのリセット機能を実装しようとしています。これは、システムにログインしていない、またはログインできないユーザー向けです。私は近いと思いますが、それは正しくありません:

私は 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 メソッドがあるようです。これは正しいパスのように感じます。ログインについて心配する必要はありません。変更してログインにリダイレクトするだけです...コードを完成させて解決策を投稿します。

誰かが私が正しい道を進んでいることを確認したり、パターンにエレガンスを追加することについて考えを投稿したりできれば、それは素晴らしいことです

4

3 に答える 3

1

誰かに役立つ場合に備えて、自分の質問に答えます。

  1. パスワード リセット リンクを送信するためのメール アドレスを要求するフォームを提供する
  2. WebSecurity.GeneratePasswordResetToken(email, 1440)トークンの生成に使用
  3. トークンの受信方法へのリンクを含むメールをユーザーに送信する
  4. トークンを受け取り、newPassword フォームを表示する HttpGet メソッドを記述します。
  5. フォームは、トークンと新しいパスワード モデルを WebSecurity.ResetPassword(token, newPassword) を使用するメソッドにポストします。
  6. ログインにリダイレクト

まだ全部書いていませんが、これが適切に行う方法だと思います

于 2013-08-10T19:26:35.973 に答える