Как изменить хэшированный пароль с помощью asp.net поставщик членства, если вы не знаете текущий пароль?


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

bool ChangePassword(string newPassword);

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

2 57

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;
    }
}