Как изменить хэшированный пароль с помощью asp.net поставщик членства, если вы не знаете текущий пароль?
проблема, нет метода:
bool ChangePassword(string newPassword);
вы должны знать текущий пароль (который, вероятно, хешированные и забыл).
2 ответа:
Это легко, что я потратил слишком много времени. Надеюсь, этот пост спасет кого-то еще от боли, ударив их по лбу так же сильно, как и я.
решение, сбросить пароль случайным образом и передать его в метод изменения.
MembershipUser u = Membership.GetUser(); u.ChangePassword(u.ResetPassword(), "myAwesomePassword");
вы не можете изменить пароль, если requiresQuestionAndAnswer= "true"
Я получил работу вокруг для этого
создал два поставщика членства в web.конфигурации
Я использую поставщик AspNetSqlMembershipProviderReset для сброса пароля, поскольку он имеет requiresQuestionAndAnswer= false, где as AspNetSqlMembershipProvider является поставщиком по умолчанию используемый.
Я написал следующий код, чтобы сбросить пароль для пользователя.
public bool ResetUserPassword(строка psUserName, строка psNewPassword) { пытаться { // Получить сведения о пользователе членства с помощью поставщика членства secound с обязательным ответом на вопрос, установленным в false.
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; } }