3

System.Web.Security を使用します。

MVC4 で resetPassword フォームを作成しています。

using System.Web.Security;

[HttpPost]
[AllowAnonymous]
public ActionResult ResetPassword(ResetPasswordModel model)
{
    MembershipUser u = Membership.GetUser(model.Username);

    if (HashResetParams(u.UserName, u.ProviderUserKey.ToString()) == model.Key)
    {
        string resetCode = u.ResetPassword();
        u.ChangePassword(resetCode, model.Password);
    }

    return View("ChangePasswordSuccess");
}

行にヒットしたときに「ResetPassword-指定されたメソッドはサポートされていません」というエラーが表示される理由:

string resetCode = u.ResetPassword();

SimpleMembership 実装を使用するようにデフォルト設定されている MVC4 プロジェクトと関係があるのだろうか。

また、ASP.NET メンバーシップでパスワードをリセットする方法についてさまざまなアプローチを見てきましたが、おそらくもっと良い方法がありますか?

4

2 に答える 2

20

使用してみてください:

string token = WebSecurity.GeneratePasswordResetToken(userName);
WebSecurity.ResetPassword(token, newPassword);
于 2012-10-19T11:09:52.873 に答える
1

SimpleMembershipProviderを使用している場合は、はい:

設計上、SimpleMembershipProvider クラスは、すべての ASP.NET メンバーシップ プロバイダーで使用される MembershipProvider クラスで定義されているように、ASP.NET メンバーシップ プロバイダーで可能なすべての機能を実装していません。一部のメンバーは、基本クラスから継承されているため、クラスで使用できますが、それらにアクセスすると例外がスローされます。

別の方法は、 SqlMembershipProviderを使用することです。

web.config に次のようなものが必要です。

<membership defaultProvider="SqlProvider"
      userIsOnlineTimeWindow="15">
      <providers>
        <add 
          name="SqlProvider" 
          type="System.Web.Security.SqlMembershipProvider" 
          connectionStringName="SqlServices"
          applicationName="MyApplication"
          enablePasswordRetrieval="false"
          enablePasswordReset="true"
          requiresQuestionAndAnswer="true"
          requiresUniqueEmail="false"
          passwordFormat="Hashed"
          maxInvalidPasswordAttempts="5"
          passwordAttemptWindow="10" />
      </providers>
    </membership>
于 2012-09-05T19:45:49.797 に答える