1

В приложении, над которым я работаю, пользователи создаются не одобрены, пока не активируют свою учетную запись. Флаг IsApproved установлен в значение false до тех пор, пока он не активируется.Проверить пароль на SqlMembershipProvider в обход IsApproved?

Когда они отправляют свою активацию, мы хотим проверить, что их пароль действителен до активации пользователя, но Membership.ValidateUser(..) всегда будет возвращать false, если пользователь не одобрен, поэтому не существует способа различать неправильный пароль и не одобренным пользователем.

Как проверить пароль для подтверждения пользователя, который не одобрен?

Возможные решения я рассматривающие до сих пор:

  • пользовательского поставщика членства: это много работы и поражения весь смысл использования системы членства в .NET, это базовая функциональность, то должен быть способ проверки пароля.
  • Правильно установите флаг IsApproved и измените его: это очень небезопасно.
  • Используя ChangePassword, чтобы перейти к случайному паролю, а затем снова, проверяя, удалось ли это: это неприятный взлом, я действительно не хочу этого делать.
  • Вызов частной CheckPassword функции на SqlMembershipProvider: методы являются частными по причине, опять же, я не хочу этого делать.

Есть ли другой способ? Наверняка это стандартная функциональность, которая требуется только любой полнофункциональной системе учетных записей пользователей с активациями и т. Д. Существует ли лучший дизайн для системы, чем то, что я делаю? Я использую IsApproved неправильно?

Спасибо за помощь.

Редактировать: похоже, это вызвало некоторую путаницу. Я создал учетную запись пользователя, у нее есть пароль, который соответствует требованиям сложности и т. Д. Что я хочу сделать, когда пользователь отправляет форму с их именем пользователя и паролем в ней, проверьте, что пароль, который они предоставили, соответствует паролю на счет. Я просто хочу знать, дали ли они правильный пароль. Из моего исследования структуры, кажется, невозможно обойтись без также, проверяя, активна ли их учетная запись.

+0

Почему вы хотите проверить, подходит ли их пароль с помощью метода 'ValidateUser()'? При создании пользователя (с 'IsApproved = false')' Membership' всегда будет проверять пароль. Если пароль соответствует всем требованиям, пользователь будет добавлен. Это должно указывать на то, что пароль действителен. Если у вас есть другое определение «valid»? – SollyM

+0

Создание пользователя подтверждает, что пароль соответствует определенным требованиям. Я хочу проверить, что пароль для отправки является правильным паролем для учетной записи пользователя. – danpalmer

+0

Пароль должен быть подтвержден до создания учетной записи. Теперь вы идете назад. *** Есть ли причина не проверять пароль перед созданием учетной записи? Например, password не может быть 123456 *** – Win

ответ

0

Теперь я вас понимаю. Мое предложение состоит в том, чтобы временно хранить свой пароль в Membership Profile и соответствовать тому, что было перед рукой. После согласования активируйте учетную запись и очистите Profile. ПРИМЕЧАНИЕ: profile сохранит password в plain text. Я делаю подобное.

+1

Спасибо за ответ. Я согласился, что это единственный способ сделать это. Но я не буду реализовывать эту функциональность. Ни при каких обстоятельствах я никогда не буду хранить пароль в виде простого текста, чисто принципиально, не говоря уже о требованиях проекта. Я мог бы хэш + солить пароль вручную и сохранить в 'MembershipProfile', но к этому моменту я действительно начинаю внедрять функциональные возможности в' SqlMembershipProvider'. В конечном итоге, MS должна сделать лучший API для этого доступного, это нормальное поведение, а не край. – danpalmer

+0

Я согласен с тобой там. Я сделал что-то подобное, но со стороны ColdFusion, где я hash + salt пароль, то сравните с таблицей Membership. – SollyM

+0

Простым дополнением к этому является шифрование пароля в таблице «Профиль». – SollyM

 Смежные вопросы

  • Нет связанных вопросов^_^