2013-08-22 116 views
0

我想不通爲什麼我的WebSecurity.ChangePassword不工作。這是我正在處理的一段代碼。WebSecurity.ChangePassword返回FALSE值

 if (WebSecurity.ChangePassword(USER, oldpass, password)) { 
        Response.Redirect("~/SuperAdmin"); 
        return; 
       }else { 
        ModelState.AddFormError(USER); 
// I put the each WebSecurity.ChangePassword parameter to this parameter to check whether 
//each parameter valid or not (print it out)     

} 

和WebSecurity.ChangePassword的每個參數,我從數據庫中檢索如下

if(IsPost){ 
    Validation.RequireField("email", "Masukkan email"); 
    Validation.RequireField("password", "Masukkan Password"); 
    Validation.RequireField("userid", "user ID tidak ada!"); 

    email = Request.Form["email"]; 
    password = Request.Form["password"]; 
    userId = Request.Form["userId"]; 

    if(Validation.IsValid()){ 
     var db = Database.Open("StarterSite"); 
     var updateCommand2 = "UPDATE UserProfile SET [email protected] WHERE [email protected]"; 
     db.Execute(updateCommand2, email,userId); 
     var USER = db.QueryValue("SELECT a.Email FROM UserProfile a, webpages_Membership b WHERE a.UserId=b.UserId AND a.UserId= @0", userId); 
     var oldpass = db.QueryValue("SELECT Password FROM webpages_Membership WHERE UserId = @0", userId); 

誰能告訴我什麼,似乎在此問題?在此先感謝

回答

0

的網頁會員已經建立的一切,你不需要獲得用戶的電子郵件地址和密碼(我猜的電子郵件地址是用戶名吧?)的ChangePassword方法需要3個參數。即UserName,CurrentPassword,NewPassword。

你得到錯誤的原因是因爲你根據用戶當前ID從數據庫獲取舊密碼,但舊密碼與用戶當前密碼不匹配,因爲舊密碼是加密的,而且你沒有加密該密碼他們提交(實際上你甚至沒有一個領域讓他們輸入他們當前的密碼)。

WebPages會員提供商將會做所有的更新,你不需要打開數據庫和更新用戶密碼,你所做的奇怪的事情是告訴用戶輸入一個新的密碼,但不要求當前的密碼!這裏看到的更多信息:

http://www.thecodingguys.net/reference/asp/websecurity-changepassword

0

確保您要更改密碼的用戶不是LockedOut。您可以通過此

select * from aspnet_membership 
where 
IsLockedOut = 1 
檢查