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
그러면 암호 재설정 메서드가 보안 응답에 전달되어야 합니다. 그렇지 않으면 예외가 발생합니다.
필요한 경우RequiresQuestionAndAnswer
true로 설정하면 이 해결 방법을 사용할 수 있습니다.
위 게시물에 언급된 이 코드는 작동합니다.
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
'source' 카테고리의 다른 글
이 MySQL/MariaDB 구문은 무엇입니까? (0) | 2023.06.10 |
---|---|
debug=true in web.config = 나쁜 것? (0) | 2023.06.10 |
어떻게 UBSan 보고서 gdb를 중단하고 계속할 수 있습니까? (0) | 2023.06.10 |
앱 스토어 링크: "이 앱 등급/검토" (0) | 2023.06.10 |
Oracle 12c에서 SQL 쿼리의 결과를 JSON으로 반환합니다. (0) | 2023.06.10 |