Мы предоставляем нашим клиентам шаблон веб-сайта для использования в качестве основы для своих веб-сайтов. На нашем сайте есть пользовательский поставщик.
У нас возникла проблема с одним клиентом. Клиент рассылает приглашения потенциальным участникам по электронной почте с URL-адресом для входа в систему участника. Во время регистрации они задали секретный вопрос / ответ.
Однако иногда потенциальный участник теряет электронную почту (и, следовательно, свой пароль), но все равно пытается присоединиться к сайту.
Клиент потребовал, чтобы участник мог сбросить свой пароль без обычного секретного вопроса / ответа, когда регистрация не была завершена.
К сожалению, MembershipProvider не предоставляет имя пользователя при запросе, требуются ли вопрос / ответ. Однако он вызывает GetUser () как раз перед.
Чтобы эта функция работала, я добавил метод (StartingPasswordRecovery) в свой MembershipProvider, чтобы отметить, что сброс пароля активен, вызывая его из события 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