Мы предоставляем нашим клиентам шаблон веб-сайта для использования в качестве основы для своих веб-сайтов. На нашем веб-сайте есть индивидуальный поставщик членства.
У нас возникла проблема, которую поднял один клиент. Клиент рассылает приглашения потенциальным участникам по электронной почте с URL-адресом для входа в систему. При регистрации они задают свой секретный вопрос / ответ.
Однако иногда потенциальный участник теряет электронную почту (и, следовательно, свой пароль), но все же пытается присоединиться к сайту.
Клиент попросил, чтобы участнику было разрешено сбросить свой пароль без обычного контрольного вопроса / ответа, когда регистрация не была завершена.
К сожалению, MembershipProvider не предоставляет имя пользователя при запросе, требуется ли вопрос / ответ. Однако непосредственно перед этим он вызывает GetUser ().
Чтобы эта функция заработала, я добавил в свой MembershipProvider метод (StartingPasswordRecovery), чтобы отметить, что сброс пароля активен, вызвав его из события OnVerifyingUser на странице PasswordRecovery.
Хотя этот код работает, я не уверен, что он очень надежный.
Может ли кто-нибудь указать мне на лучшее решение.
Вот соответствующий код, который я добавил к поставщику членства.
Private _hasUserDefinedQuestionAndAnswer As Boolean
Private _isResettingPassword As Boolean
Public Overloads Overrides Function GetUser(ByVal username As String, ByVal userIsOnline As Boolean) As System.Web.Security.MembershipUser
...
_hasUserDefinedQuestionAndAnswer = ...
...
End Function
Public Overrides ReadOnly Property RequiresQuestionAndAnswer() As Boolean
Get
If Me._isResettingPassword Then
Me._isResettingPassword = False
Return Me.pRequiresQuestionAndAnswer And Me._hasUserDefinedQuestionAndAnswer
End If
Return Me.pRequiresQuestionAndAnswer
End Get
End Property
Public Sub StartingPasswordRecovery()
Me._isResettingPassword = True
End Sub