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
암호가 Web.Config에 명시된 요구 사항 (최소 길이 등)을 충족하지 않으면 예외가 발생합니다. 그러나 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)
SimpleMembershipProvider를 사용하는 것이 더 쉽습니다.
var token = WebSecurity.GeneratePasswordResetToken("LoginOfUserToChange");
WebSecurity.ResetPassword(token, "YourNewPassword");
언급 된 모든 솔루션은 RequiresQuestionAndAnswer
멤버십 시스템 구성에서 속성이 false로 설정된 경우에만 작동 합니다. 경우 RequiresQuestionAndAnswer
에 해당하는 다음 ResetPassword 방법은, 그렇지 않으면 예외가 발생합니다, 보안 답을 통과해야합니다.
RequiresQuestionAndAnswer
true로 설정 해야하는 경우이 해결 방법을 사용할 수 있습니다.
123456 대신 텍스트 상자에서 설정하려는 비밀번호를 사용하십시오.
MembershipUser user;
user = Membership.GetUser(userName,false);
user.ChangePassword(user.ResetPassword(),"123456");
위의 게시물에 언급 된이 코드는 작동합니다.
string username = "username";
string password = "newpassword";
MembershipUser mu = Membership.GetUser(username);
mu.ChangePassword(mu.ResetPassword(), password);
그러나 멤버 자격 공급자 태그의 web.config에서 requiresQuestionAndAnswer = "false"를 설정해야합니다. true 인 경우 resetpassword 메서드는 "값은 null 일 수 없음"오류를 생성합니다. 이 경우 ResetPassword에 대한 매개 변수로 질문 답변을 제공해야합니다.
@Rob Church가 맞습니다.
여기에있는 다른 답변은 정확하지만 암호를 알 수없는 상태로 둘 수 있습니다.
그러나 수동으로 유효성 검사를 수행하는 솔루션 대신 ResetPassword from token 메서드를 사용하여 암호를 변경하고 오류를 포착하여 표시하려고합니다.
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
}
'code' 카테고리의 다른 글
쿼리에서 SQL 데이터 유형을 반환하려면 어떻게합니까? (0) | 2020.12.10 |
---|---|
전 처리기 지시문 #if와 #ifdef의 차이점 (0) | 2020.12.10 |
조건부 텍스트를 출력하는 Twig 속기 구문이 있습니까? (0) | 2020.12.10 |
VS Code에서 여러 터미널을 추가하는 방법은 무엇입니까? (0) | 2020.12.10 |
파이썬에서 다중 스레드 프로그램을 어떻게 프로파일 링 할 수 있습니까? (0) | 2020.12.09 |