2008-11-13 2 views
57

문제는 어떤 방법이 없다 :현재 암호를 모르면 asp.net 멤버 자격 공급자를 사용하여 해시 된 암호를 어떻게 변경합니까?

bool ChangePassword(string newPassword); 

당신은 (아마 해시 및 잊어) 현재 암호를 알아야합니다.

+0

질문을 분리하고 답변을 추가해야합니다. –

+0

@mcqwerty, 이제는 답변을 분리 했으므로 자신의 대답을 "받아 들여야"합니다 – harriyott

+0

좋은 직장, 나는 ChangePassword 컨트롤 (사용자를위한 관리자 비밀번호 변경)을 사용하여이 작업을 수행했습니다.) – CheGueVerra

답변

126

이것은 너무 많은 시간을 낭비하는 쉬운 것입니다. 잘만되면이 지위는 내가했던 것처럼 그들의 이마를 때리는 고통을 다른 사람에게 구하지 않는다.

해결 방법 : 암호를 임의로 재설정하고이를 변경 방법으로 전달하십시오.

MembershipUser u = Membership.GetUser(); 
u.ChangePassword(u.ResetPassword(), "myAwesomePassword"); 
+2

안녕하세요. 자신의 질문에 답하기 위해 downvote하지 마십시오. FAQ는 그것을 장려합니다. http://stackoverflow.com/questions/18557/how-does-stackoverflow-work-the-unofficial-faq#119658 – DOK

+0

답변을 이동하기 전에 아래쪽 투표 (나 아님)가 표시되었습니다. 이전에 그 대답은 의문의 여지가 있다고 말했습니다. 나는 단지 SO에 가입 한 사람을 투표에 너무 열중하지 않습니다. 도움을 청하기 위해 편집하는 것이 훨씬 낫습니다. – harriyott

+0

예. 그리고 그는 또한 귀여운 휘장을 얻습니다! – CheGueVerra

2

당신은 암호를 변경할 수 없습니다 경우 requiresQuestionAndAnswer = "true"를

내가 Web.config의이

만든 두 멤버 자격 공급자에 대한 주위에 일이있어

RequireQuestionAndAnswer = false가 있으므로 암호 재설정을 위해 AspNetSqlMembershipProviderReset 공급자를 사용하고 있습니다. 여기서 AspNetSqlMembershipProvider는 사용되는 기본 공급자입니다.

다음 코드를 작성하여 사용자의 비밀번호를 재설정하십시오.

공공 부울 ResetUserPassword (문자열 psUserName, 문자열 psNewPassword는) { 는 { // false로 설정 필요한 질문의 대답과 secound 멤버 자격 공급자를 사용하여 회원 사용자 정보를 가져보십시오.

 MembershipUser currentUser = Membership.Providers["AspNetSqlMembershipProviderReset"].GetUser(psUserName,false); 

     //Reset the user password. 
     String vsResetPassword = currentUser.ResetPassword();    

     //Change the User password with the required password    
     currentUser.ChangePassword(vsResetPassword, psNewPassword); 
     //Changed the comments to to force the user to change the password on next login attempt 
     currentUser.Comment = "CHANGEPASS"; 
     //Check if the user is locked out and if yes unlock the user 
     if (currentUser.IsLockedOut == true) 
     { 
      currentUser.UnlockUser(); 
     } 
     Membership.Providers["AspNetSqlMembershipProviderReset"].UpdateUser(currentUser);   return true; 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
     return false; 
    } 
} 
관련 문제