Как управлять форматом 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, который генерировал бы случайные строки пароля, так что это было довольно быстрое изменение.