Как управлять форматом MembershipUser.ResetPassword()

Можно ли управлять форматом пароля, который автоматически генерируется вызовом MemberhipUser.ResetPassword()?

Я хочу иметь возможность разрешать или не разрешать определенные специальные символы в сгенерированном пароле.

Я использую SqlMembershipProvider с форматом пароля Hashed.

Спасибо.

Ответ 1

Взгляните на эту статью - Изменение формата автогенерированного пароля в SqlMembershipProvider.

Я придумал быстрый способ взломать SqlMembershipProvider для создания менее сложных паролей, и это было так же просто, как создать новый класс поставщика, который наследуется от SqlMembershipProvider, а затем переопределяет метод GeneratePassword.

Это не полностью разрешенное решение, но оно может помочь.

Ответ 2

Возможно, вы захотите сделать это в два этапа, как отметил Марк Фицпатрик здесь: http://bytes.com/groups/net-asp/689452-how-reset-users-password-without-having-use-passwordrecovery#post2740740

Сначала Reset пароль, а затем немедленно измените его в соответствии с вашим вкусом. Очевидно, что использование фиксированной строки, как в примере Mark, НЕ рекомендовалось - вы бы хотели реализовать некоторый генератор случайных строк.

user.ChangePassword(user.ResetPassword(), MyMethodToGenerateRandomPassword());

Ответ 3

Сегодня вы также можете использовать метод Membership.GeneratePassword и передать MinRequiredPasswordLength или использовать свойство, уже определенное в Web.config, следующим образом:

  var newPassword =
                   // 0 = Number of non alphanumeric characters
                  Membership.GeneratePassword(Membership.MinRequiredPasswordLength, 0);

  user.ChangePassword(user.ResetPassword(), newPassword);

Ответ 4

Я надеялся, что некоторые параметры конфигурации могут использоваться, но переопределение метода GeneratePassword() работает для моей ситуации.

У нас уже был класс утилиты crypto, который генерировал бы случайные строки пароля, так что это было довольно быстрое изменение.