Подтвердить что ты не робот

Пароль смены членства asp.net без знания старого

Оценивая сигнатуру метода, при ее изменении требуется знать старый пароль.

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

Есть ли способ сменить пароль, не зная старого.

4b9b3361

Ответ 1

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

Ответ 2

Другие ответы здесь верны, но могут оставить пароль в неизвестном состоянии.

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
}

Ответ 3

Вам необходимо reset пароль пользователя перед его заменой и передать сгенерированный пароль на ChangePassword.

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

или inline:

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

Ответ 4

Попробуйте проще использовать SimpleMembershipProvider:

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

Ответ 5

Обратите внимание, что все упомянутые решения будут работать, только если для свойства RequiresQuestionAndAnswer установлено значение false в конфигурации системы членства. Если RequiresQuestionAndAnswer истинно, то метод ResetPassword должен быть передан ответ безопасности, иначе он выдает исключение.

Если вам нужно RequiresQuestionAndAnswer установить значение true, вы можете использовать этот обходной путь

Ответ 6

Используйте пароль, который вы хотите установить из текстового поля вместо 123456.

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

Ответ 7

Этот код, упомянутый выше в сообщениях, работает:

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

Но вы должны установить requireQuestionAndAnswer = "false" в web.config в теге поставщика членства. Если это так, метод resetpassword генерирует ошибку "Значение не может быть null". В этом случае вы должны предоставить ответ вопроса в качестве параметра ResetPassword.

Ответ 8

Церковь @Rob права:

Другие ответы здесь верны, но могут оставить пароль в неизвестное состояние.

Однако вместо его решения выполнить проверку вручную, я попытался бы изменить пароль, используя метод ResetPassword из токена, и поймать и показать ошибку:

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
}