Как изменить хешированный пароль с помощью поставщика членства asp.net, если вы не знаете текущий пароль? - PullRequest
57 голосов
/ 13 ноября 2008

Проблема, нет способа:

bool ChangePassword(string newPassword);

Вы должны знать текущий пароль (который, вероятно, хеширован и забыт).

Ответы [ 2 ]

127 голосов
/ 13 ноября 2008

Это легкий вопрос, на который я потратил слишком много времени. Надеюсь, что этот пост избавит кого-то от боли по лбу так же сильно, как я.

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

MembershipUser u = Membership.GetUser();
u.ChangePassword(u.ResetPassword(), "myAwesomePassword");
2 голосов
/ 04 февраля 2011

Вы не можете изменить пароль, если requiredQuestionAndAnswer = "true"

У меня есть работа для этого

Создано два провайдера членства в web.config

Я использую провайдера AspNetSqlMembershipProviderReset для сброса пароля, так как он имеет requireQuestionAndAnswer = false, где AspNetSqlMembershipProvider - используемый провайдер по умолчанию.

Я написал следующий код для сброса пароля для пользователя.

public bool ResetUserPassword (String psUserName, String 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...