使用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();
我想知道它是否与MVC4项目默认使用SimpleMembership实现有关。
另外,我已经看到了有关如何在ASP.NET成员资格中重置密码的各种方法,也许还有更好的方法?
答案 0 :(得分:20)
尝试使用:
string token = WebSecurity.GeneratePasswordResetToken(userName);
WebSecurity.ResetPassword(token, newPassword);
答案 1 :(得分:1)
如果您使用的是SimpleMembershipProvider,那么是:
按照设计,SimpleMembershipProvider类不实现 ASP.NET成员资格中可以使用的全部功能 提供者,由MembershipProvider类中定义的 所有ASP.NET成员资格提供者有些成员可以参加 class因为它们是从基类继承的,但会抛出 如果你访问它们就是一个例外。
另一种方法是使用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>