2012-07-11 41 views
2

MembershipService.ChangePassword不更改密码问题。我不知道为什么......MembershipService.ChangePassword不更改密码问题

var userUsers = from n in db.aspnet_Users where n.UserId == id select n; 
       string userName = userUsers.Single<aspnet_Users>().UserName; 

       MembershipUser user = Membership.GetUser(userName, false); 
       if (user != null) 
       { 
        string generatedPassword = user.ResetPassword(); 
        if (MembershipService.ChangePassword(userName, generatedPassword, model.NewPassword)) 
        { 

// So it doesn't change the password 
+0

你是否在'if(user!= null)'行放了一个断点来检查用户是否真的被选中?您是否收到任何错误或密码不变?在操作之后你有没有调用'db.SaveChanges();'? – rcdmk 2012-07-11 00:15:44

+0

@rcdmk我是否在MembershipService.ChangePassword之后使用db.SaveChanges()? – 2012-07-11 00:22:02

+1

没有。只有当你在你的数据库中存储了密码或者对它进行了一些修改。我只是在考虑可能的错误,因为我不知道代码的其余部分。这个方法中有没有其他相关的代码? – rcdmk 2012-07-11 00:26:33

回答

2

检查this出的文档中:

ChangePassword返回true如果密码已成功更新。 否则,它返回false

在更改密码之前,ChangePassword会调用提供程序的可覆盖OnValidatingPassword方法来验证新密码。然后根据呼叫的结果更改密码或取消操作。

如果用户名,密码,新密码或密码答案并不 有效,ChangePassword不抛出异常;它只是返回 false。

密码更改成功后,ChangePassword更新用户的LastPasswordChangedDate

当我有完全相同的问题时,这帮了我一次机会。该密码无效,因此该方法从未实际改变过它。我在web.config文件中更改了一些密码配置,然后终于有效。

检查你的web.config的这段台词,这可能是问题:

<membership defaultProvider="Demo_MemberShipProvider"> 
    <providers> 
     <add name="Demo_MemberShipProvider" 
      type="System.Web.Security.SqlMembershipProvider" 
      connectionStringName="cnn" 
      enablePasswordRetrieval="false" 
      **enablePasswordReset="true"** 
      **requiresQuestionAndAnswer="true"** 
      applicationName="/" 
      requiresUniqueEmail="false" 
      passwordFormat="Hashed" 
      maxInvalidPasswordAttempts="5" 
      **minRequiredPasswordLength="5"** 
      **minRequiredNonalphanumericCharacters="0"** 
      passwordAttemptWindow="10" passwordStrengthRegularExpression=""> 
    </providers> 
</membership> 

希望它能帮助!

+0

您是否仍有在“web.config”中更改的配置设置?如果是这样,你可以把它发布在你的答案? – rcdmk 2012-07-11 00:28:11

+0

当然@rcdmk,我会将它添加到我的答案。 – 2012-07-11 00:30:47