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");
}

知道为什么我在上线时收到“不支持重置密码指定的方法”错误:

string resetCode = u.ResetPassword();

我想知道它是否与默认使用 SimpleMembership 实现的 MVC4 项目有关。

另外,我已经看到了有关如何在 ASP.NET Membership 中重置密码的各种方法,也许有更好的方法?

4

2 回答 2

20

尝试使用:

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

如果您使用的是SimpleMembershipProvider,则可以:

按照设计,SimpleMembershipProvider 类没有实现 ASP.NET 成员资格提供程序中可能的全部功能,正如所有 ASP.NET 成员资格提供程序使用的 MembershipProvider 类中所定义的那样。类中的某些成员是可用的,因为它们是从基类继承的,但如果您访问它们会抛出异常。

另一种方法是使用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 回答