表单Auth-pwd恢复 - 我宁愿用户在网络上重置它而不发送电子邮件

时间:2009-02-05 17:59:53

标签: c# asp.net forms-authentication

问题1 - 我想让用户只能在没有电子邮件和生成密码的情况下重置密码。用户通过自定义表单对自己的内部数据库进行验证。然后,我想提示他们输入用户名和安全性q& a。我不知道如何做安全QA所以我决定自定义密码恢复控制。我不希望它发送带有新密码的电子邮件。相反,如果他们获得了用户名和问题,我想将它们发送到密码重置页面。

有没有办法向他们询问安全问题,并通过编写自定义代码或使用预构建组件进行比较。另外,如何重置密码后如何设置密码?

问题2- 我正在研究'忘记用户名'。它将首先验证我们的数据库。根据他们输入的内容,我将能够匹配并在表单身份验证数据库中找到用户名和用户ID。我想问他们安全问题,但不知道如何根据他们输入的内容创建哈希来比较用户的aspnet数据库中的内容。有没有办法做到这一点?

感谢!!!

1 个答案:

答案 0 :(得分:6)

如果您使用的是asp.net表单身份验证,它已经为用户提供了使用安全问题重置密码的机制。这可以在Web.config中配置,并与密码恢复控件一起使用,这是ASP.net登录控件的一部分。

在您的会员提供商部分下的web.config中进行设置:

requiresQuestionAndAnswer - 设置为true时,系统需要提供问题视图才能检索或重置用户密码。设置为false时,不会向用户显示问题视图。

此处使用密码恢复控件的示例代码为:

  <asp:PasswordRecovery ID="PasswordRecovery1" runat="server">
  <QuestionTemplate>
                <h2>Forgot Password</h2>
                Hello <asp:Literal ID="UserName" runat="server"></asp:Literal><br />
                Please answer your password question : <br />
                <asp:Literal ID="Question" runat="server"></asp:Literal>
                <asp:TextBox ID="Answer" runat="server"></asp:TextBox><br />
                 <asp:Button ID="SubmitButton" runat="server" Text="Send Answer By Mail" 
CommandName="Submit"/><br />
                  <asp:Literal ID="FailureText" runat="server"></asp:Literal>
    </QuestionTemplate>
    </asp:PasswordRecovery>

有关使用ASP.net登录控件的更多信息,请转到http://quickstarts.asp.net/QuickStartv20/aspnet/doc/ctrlref/login/default.aspx

至于不发送电子邮件,您可以通过在密码恢复控件中添加OnSendingMail =“CancelEmail”取消电子邮件,然后添加如下所示的代码,然后在屏幕上显示新的重置密码。

Sub CancelEmail(ByVal sender As Object, ByVal e As MailMessageEventArgs)
        e.Cancel = True
End Sub

希望有所帮助!