2013-04-10 128 views
1

我想知道如何在不知道旧密码的情况下使用mvc4提供程序设置密码?Webmatrix重置密码

我想做一个忘记密码的功能,用户通过电子邮件收到一个安全链接,然后点击链接,定向到我的应用程序,然后只填写新密码,不需要安全问题。

用mvc3附带的会员提供商很容易做到这一点。我现在正在使用mvc4附带的简单会员供应商,并且无法正常工作。

MembershipUser user = Membership.GetUser(cust.Email); 
       String pass = user.GetPassword(); 

       Boolean success = WebSecurity.ChangePassword(cust.Email, pass, model.Password); 

目前,它给出了一个调用getPassword来上面的线()与错误错误:不支持

指定的方法

因为到目前为止的代码看起来那么简单。

我将展示在web.config中的相关部分也在这里:

<system.web> 
     <roleManager enabled="true" defaultProvider="SimpleRoleProvider"> 
      <providers> 
       <clear/> 
       <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/> 
      </providers> 
     </roleManager> 
     <membership defaultProvider="SimpleMembershipProvider"> 
      <providers> 
       <clear/> 
       <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" 
     enablePasswordRetrieval="true" enablePasswordReset="true" passwordFormat="Encrypted" requiresQuestionAndAnswer="false" 
     requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="5" minRequiredNonalphanumericCharacters="0" 
     passwordAttemptWindow="10" /> 
      </providers> 
     </membership> 

在上面,我试图添加使用在MVC3提供者的属性,但它似乎并没有被适用于此。

回答

3

WebSecurity.GeneratePasswordResetToken生成并返回一个唯一的字符串。

WebSecurity.ResetPassword使用该令牌更改密码。

以令牌为参数给用户一个操作的链接,然后给他们一个简单的表单来更改他们的密码。

+0

我很高兴它是如此简单。我自己没有看到这个,我感到很傻。 – John 2013-04-10 14:12:19

+0

约翰说什么:)我混淆了ConfirmAccount和ResetPassword方法...很高兴能够使用(令牌,newPassword)参数并且不必关心其他事情 – 2013-08-10 19:54:34

+0

不要忘记添加一个秘密问题字段以及。 – 2016-10-11 18:47:13