0

MVC3RazorWebサイトがあります。私はここのチュートリアルに従っています:

http://www.thecodingguys.net/tutorials/asp/webpages-membership-forgot-password-and-reset-password

トークンを生成してメールを正常に送信できました

次に、電子メールで次のようなリンクのresetpasswordビューに移動します。

〜/ Account / resetpassword?token = fujgFIo7k27c72-UTTJeGA2fujgFIo7k27c72-UTTJeGA2

これが私のHttpGetメソッドです

    [AllowAnonymous]
    [HttpGet]
    public ActionResult resetpassword()
    {
        ResetPasswordModel model = new ResetPasswordModel()
        {
            Password = String.Empty,
            ConfirmPassword = String.Empty,
            Token = String.Empty
        };
        return View(model);
    }

モデルのインスタンスを渡すだけです

resetpassword.cshtmlに対する私の見解

@model RazorARPP.Models.ResetPasswordModel
@{    
    var token = Request["token"];
    Model.Token = token;
}



<form action="" method="post" enctype="multipart/form-data" id="MyForm">
@Html.ValidationSummary(true)
<fieldset>
<legend>Reset Password</legend>
@Html.HiddenFor(m => m.Token)
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessage("password")

<br/>

@Html.LabelFor(m => m.ConfirmPassword)
@Html.PasswordFor(m => m.ConfirmPassword)
@Html.ValidationMessage("confirmPassword")

<input type="submit"/>

</fieldset>
</form>

今私のHttpPostメソッド

[AllowAnonymous]
    [HttpPost]
    public ActionResult resetpassword(ResetPasswordModel model)
    {
        if (model.Password == model.ConfirmPassword)
        {
            WebSecurity.ResetPassword(model.Token, model.Password);
        }
        return RedirectToAction("Login");
    }

正常に実行されますが、resetpasswordが機能していません。その行がデバッガーで実行されていることを確認しました。私が間違っていることについて何か提案はありますか?ありがとう

4

3 に答える 3

2

リセットトークンをどのように生成していますか?正しいユーザー名を使用していますか?

WebSecurity.GeneratePasswordResetToken(model.Email)

トークンを生成してすぐにに渡すテストを実行しますWebSecurity.ResetPassword。私はresetpasswordあなたが期待している値を取得していないと思います

于 2012-12-19T20:12:59.917 に答える
1

問題は、重複したトークンを送信するときの電子メールにあります。

 var confirmationUrl = hostUrl + VirtualPathUtility.ToAbsolute("~/Account/resetpassword?token=" + token +  HttpUtility.HtmlEncode(token));

このようにする必要があります

 var confirmationUrl = hostUrl + VirtualPathUtility.ToAbsolute("~/Account/resetpassword?token=" +  HttpUtility.HtmlEncode(token));

これですべてが機能するはずです。

あなた自身のURLを見てください

〜/ Account / resetpassword?token = fujgFIo7k27c72-UTTJeGA2fujgFIo7k27c72-UTTJeGA2

トークンが重複している、それが問題でした。

于 2012-12-23T17:27:06.060 に答える
0

入力したパスワードがパスワード規則を満たさない場合、この呼び出しは失敗します(falseを返します)。メンバーシッププロバイダーの構成ファイルにある設定を確認してください。

また、メンバーシッププロバイダーによっては、アカウントがロックされている場合にfalseが返される場合がありますが、現時点では確認できません。

于 2016-08-18T01:57:33.210 に答える