2012-07-11 39 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