【问题标题】:In ASP.NET Membership, why would resetPassword cause a "Specified Method not supported" error?在 ASP.NET Membership 中,为什么 resetPassword 会导致“不支持指定方法”错误?
【发布时间】:2012-09-05 19:33:14
【问题描述】:

使用 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-Specified Method not supported”错误:

string resetCode = u.ResetPassword();

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

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

【问题讨论】:

  • 在 web.config 的 add-provider 标签中验证enablePasswordReset="true"

标签: c# asp.net-membership asp.net-mvc-4


【解决方案1】:

尝试使用:

string token = WebSecurity.GeneratePasswordResetToken(userName);
WebSecurity.ResetPassword(token, newPassword);

【讨论】:

  • 这应该是答案。
  • 谢谢!这非常有效。我同意 Pinch,这就是答案。
  • 这应该是答案++
【解决方案2】:

如果您使用的是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>

【讨论】:

  • 感谢 Josh- 默认 MVC4 项目使用 Account Controller 上的 [InitializeSimpleMembership] 属性。我已经删除了它,并设置了我的 web.config section= 。我仍然收到错误消息,您知道我还需要在哪里指定会员提供者吗?非常感谢
  • 您需要确保提供者已实际注册。 defaultProvider 只是一个命名的提供者。所以它可以说“Bob”或“Foo”。重要的是您实际上已为提供程序配置了 SQL 成员资格提供程序。
  • 嘿乔希 - 我的 ASP.NET 配置表明我正在使用 SqlMembershipProvider。如果你还能想到什么,请告诉我。非常非常感谢!
  • 你有enablePasswordReset="true"
  • 我知道,但是伙计,在我检查之前,你就让我捂脸了。谢谢!
猜你喜欢
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多