Мы недавно добавили способность к клиентам изменить их собственные пароли с помощью вопроса о безопасности. Для новых клиентов это прекрасно, поскольку мы можем установить вопрос о безопасности и ответ на создании учетной записи. Для существующих клиентов это - проблема.
Для клиентов, которые забыли их пароль, мы посылаем им по электронной почте временный пароль, и затем они входят в систему, с которым можно изменить их пароль. Однако этот метод теперь повреждается, потому что их ответ пароля является пустым. Я должен так или иначе вызвать в ответе временного пароля для членства asp.net для принятия моего временного пароля. Я смотрел в aspnet_Membership таблице, и это было пустым для PasswordQuestion и PasswordAnswer. Я пытался установить значение PasswordAnswer к их текущему соленому паролю, только иметь значение там, но ASP.NET продолжает говорить мне, что ответ пароля не может быть пустым.
Кто-либо знает об обходном решении для этого? Как мы можем легко добавить в ответе временного пароля? Мы можем сбросить вопрос о безопасности и ответить, после того как мы изменяем пароль, поскольку мы знаем, каков временный пароль, но мы находимся в уловке - 22 не имея возможности для установки временного пароля.
Я знаю, что мы могли установить другое членство asp.net для них, чтобы быть сброшенными, но я не хочу делать это, поскольку мы совместно используем методы, и это добавляет намного больше сложности. Нам просто нужно, в 1 раз загружаясь некоторого значения по умолчанию для ответа пароля. Какие-либо идеи?
Обновление: хорошо, я выяснил, что проблема не имела значения в DB, но значения, я был передающим к ResetPassword () метод. Это ищет меня для передачи значения, которое соответствует тому, что хранится в DB. Однако я не могу произвести то значение, потому что оно сгенерировано от соли сохраненного пароля и введенного пароля. Я пытался использовать другой пользовательский сохраненный пароль в качестве теста, и он не работал.
Что вы для этого используете? Вы можете легко сделать это, написав его в базе данных с помощью оператора обновления
update aspnet_membership set PasswordAnswer = Password
. Кроме того, если вы хотите получить общий ответ с паролем, я сделал одну вещь в тестовой среде с тем же ключом алгоритма / машины или в вашей среде prod создайте учетную запись, чтобы изменить ответ пароля на то, что вы знаете (например, ваш), затем скопируйте это значение в запрос на обновление, например:
update aspnet_Membership set PasswordAnswer = '<the known v alue>'
, поскольку ответ также зашифрован.
Будьте осторожны, если вы делаете это в производственной среде; Я настоятельно рекомендую сделать это в тестовой среде (при условии, что она имеет тот же ключ шифрования), протестировав там сценарий перед его развертыванием.
HTH.