【发布时间】:2011-04-12 19:04:13
【问题描述】:
我们为客户提供网站模板,作为他们网站的基础。我们的网站有一个自定义会员服务提供商。
我们遇到了一位客户提出的问题。客户通过电子邮件向潜在会员发送邀请,其中包含登录会员的 URL。在注册期间,他们会设置安全问题/答案。
但是,有时潜在会员会丢失电子邮件(以及密码),但仍会尝试加入网站。
客户要求在注册未完成时允许会员在没有通常的安全问题/答案的情况下重设密码。
很遗憾,MembershipProvider 在请求是否需要问题/答案时没有提供用户名。但是它确实在之前调用了 GetUser()。
为了使此功能正常工作,我向 MembershipProvider 添加了一个方法 (StartingPasswordRecovery) 来标记密码重置处于活动状态,并从 PasswordRecovery 页面中的 OnVerifyingUser 事件调用它。
虽然这段代码有效,但我不相信它非常健壮。
谁能给我指出一个更好的解决方案。
这是我添加到我的会员提供商的相关代码。
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
【问题讨论】:
标签: asp.net passwords membership-provider