source

asp.net 회원 자격 이전 비밀번호를 모르고 비밀번호 변경

manycodes 2023. 6. 10. 09:32
반응형

asp.net 회원 자격 이전 비밀번호를 모르고 비밀번호 변경

메소드 서명을 평가할 때, 변경하는 동안 이전 비밀번호를 알아야 합니다.

membershipUser.ChangePassword(userWrapper.OldPassword, userWrapper.Password)

오래된 비밀번호를 모르면서 비밀번호를 변경할 수 있는 방법이 있습니까?

 string username = "username";
 string password = "newpassword";
 MembershipUser mu = Membership.GetUser(username);
 mu.ChangePassword(mu.ResetPassword(), password);

여기에 있는 다른 답변은 올바르지만 암호를 알 수 없는 상태로 유지할 수 있습니다.

ChangePassword암호가 웹에 제시된 요구 사항을 충족하지 않는 경우 예외를 발생시킵니다.구성(최소 길이 등).하지만 그것은 다음에 실패합니다.ResetPassword호출되었으므로 원래 사용자나 암호를 변경하려는 사용자는 암호를 알 수 없습니다.이를 방지하려면 암호를 변경하기 전에 복잡성 요구 사항을 확인하십시오.

var user = Membership.GetUser(userName, false);

if ((newPassword.Length >= Membership.MinRequiredPasswordLength) &&
    (newPassword.ToCharArray().Count(c => !Char.IsLetterOrDigit(c)) >=
         Membership.MinRequiredNonAlphanumericCharacters) &&
    ((Membership.PasswordStrengthRegularExpression.Length == 0) ||
         Regex.IsMatch(newPassword, Membership.PasswordStrengthRegularExpression))) {

    user.ChangePassword(user.ResetPassword(), newPassword);
} else {
    // Tell user new password isn't strong enough
}

사용자 암호를 변경하기 전에 암호를 재설정하고 생성된 암호를 에 전달해야 합니다.ChangePassword.

string randompassword = membershipUser.ResetPassword();
membershipUser.ChangePassword(randompassword , userWrapper.Password)

또는 인라인:

membershipUser.ChangePassword(membershipUser.ResetPassword(), userWrapper.Password)

Simple Membership Provider를 사용해 보십시오. 더 쉽습니다.

var token = WebSecurity.GeneratePasswordResetToken("LoginOfUserToChange");
WebSecurity.ResetPassword(token, "YourNewPassword");

언급된 모든 솔루션은 다음과 같은 경우에만 작동합니다.RequiresQuestionAndAnswer구성원 자격 시스템 구성에서 속성이 false로 설정되었습니다.한다면RequiresQuestionAndAnswer그러면 암호 재설정 메서드가 보안 응답에 전달되어야 합니다. 그렇지 않으면 예외가 발생합니다.

필요한 경우RequiresQuestionAndAnswertrue로 설정하면 이 해결 방법을 사용할 수 있습니다.

위 게시물에 언급된 이 코드는 작동합니다.

string username = "username";
string password = "newpassword";
MembershipUser mu = Membership.GetUser(username);
mu.ChangePassword(mu.ResetPassword(), password);

그러나 membership 공급자 태그의 web.config에 requiredQuestionAndAnswer="false"를 설정해야 합니다.true이면 resetpassword 메서드에서 "값은 null일 수 없습니다."라는 오류를 생성합니다.이 경우 ResetPassword에 대한 매개 변수로 질문 답변을 제공해야 합니다.

123456 대신 텍스트 상자에서 설정할 암호를 사용합니다.

 MembershipUser user;     
 user = Membership.GetUser(userName,false);
 user.ChangePassword(user.ResetPassword(),"123456");

@롭 처치의 말이 맞습니다.

여기에 있는 다른 답변은 올바르지만 암호를 알 수 없는 상태로 유지할 수 있습니다.

그러나 수작업으로 확인하는 그의 솔루션 대신 토큰에서 암호 재설정 방법을 사용하여 암호를 변경하려고 시도하고 오류를 포착하여 표시합니다.

var user = UserManager.FindByName(User.Identity.Name);
string token = UserManager.GeneratePasswordResetToken(user.Id);
var result = UserManager.ResetPassword(user.Id, token, model.Password);
if (!result.Succeeded){
    // show error
}
string username = "UserName";
string userpassword = "NewPassword";
string resetpassword;
    
MembershipUser mu = Membership.GetUser(username, false);

if (mu == null){
    Response.Write("<script>alert('Invalid Username!')</script>"); 
}

else{
    resetpassword = mu.ResetPassword(username);
    if (resetpassword != null){
         if (mu.ChangePassword(resetpassword, userpassword)){
             Response.Write("<script>alert('Password changed successfully!')</script>"); 
         }
    }
    else{
           Response.Write("<script>alert('Oh some error occurred!')</script>"); 
        }
    }
 string username = "UserName";
 string userpassword = "NewPassword";   
 MembershipUser mu = Membership.GetUser(username, false);
 mu.ChangePassword(mu.ResetPassword(username), userpassword);

언급URL : https://stackoverflow.com/questions/5013901/asp-net-membership-change-password-without-knowing-old-one

반응형