PasswordRecovery控件的简单使用

 

使用PasswordRecovery控件

如果用户忘记了自己的登录密码,那么可以使用PasswordRecovery控件将密码找回。通过PasswordRecovery控件不但可以找回用户的原始密码,也可以对密码进行重置后再将新密码发送给用户。
代码清单1-34中的页面包含了一个PasswordRecovery控件。
代码清单1-34  ShowPasswordRecovery.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <style type="text/css">
        .passwordRecovery
        {
            font:14px Verdana,Sans-Serif;
            background-color:lightblue;
            border:solid 3px black;
            padding:4px;
        }
        .passwordRecovery_title
        {
            background-color:darkblue;
            color:white;
            font-weight:bold;
        }
        .passwordRecovery_instructions
        {
            font-size:12px;
            text-align:left;
            padding:10px;
        }
        .passwordRecovery_button
        {
            border:solid 1px black;
            padding:3px;
        }
    </style>
    <title>Show PasswordRecovery</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
    <asp:PasswordRecovery
        id="PasswordRecovery1"
        CssClass="passwordRecovery"
        TitleTextStyle-CssClass="passwordRecovery_title"
        InstructionTextStyle-CssClass="passwordRecovery_instructions"
        SubmitButtonStyle-CssClass="passwordRecovery_button"
        Runat="server">
        <MailDefinition
            From="Admin@YourSite.com"
            Subject="Password Reminder" />
    </asp:PasswordRecovery>   
   
    </div>
    </form>
</body>
</html>
在网页浏览器中访问代码清单1-34中的页面时,会出现一个要求输入用户名的表单提示框(见图1-15)。接下来,需要回答当初注册该用户时所输入的安全提示问题。如果安全提示问题回答正确,该用户的密码就会发送到用户注册信息中的电子邮件地址中。
在默认情况下,PasswordRecovery控件会首先重置用户的密码,再发送其自动生成的新密码。在下一节中,将介绍如何通过该控件找回用户的原始密码。
图1-15  通过PasswordRecovery控件找回丢失密码
注解   在使用PasswordRecovery控件之前,必须在该应用程序的Web配置文件中指定控件所使用的电子邮件服务设置。详细配置信息见1.3.2节。
1.7.1  找回用户的原始密码
在默认情况下,PasswordRecovery控件不会发送用户的原始密码。如果不希望在发送密码之前自动重置用户的密码,那么就必须改变Membership接口提供器的配置。其中三个相关的配置设置是passwordFormat、enablePasswordRetrieval和enablePasswordReset。
属性PasswordRecovery的默认值是Hashed。当密码被散列后,PasswordRecovery控件就不能发送用户的原始密码了,并且任何地方都不会保存有原始密码。从保护秘密安全的角度来看,这个限制是很有意义的。如果希望系统能向用户发送原始密码,那么就需要将passwordFormat属性设置为Clear或者Encrypted。
属性enablePasswordRetrieval的默认值是false。因此,如果希望向用户发送其原始密码,还必须在Web配置文件中启用这个属性。
最后,属性enablePasswordReset的默认值是true。不管属性passwordFormat或属性enablePassword- Retrieval的取值是什么,通过enablePasswordReset属性都能够重置用户的密码,并由电子邮件将新密码发送给用户。
允许发送用户原始密码的必要配置信息包含在代码清单1-35中的Web配置文件中。
代码清单1-35  Web.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <authentication mode="Forms" />
    <membership defaultProvider="MyMembership">
      <providers>
        <add
          name="MyMembership"
          type="System.Web.Security.SqlMembershipProvider"
          connectionStringName="LocalSqlServer"
          passwordFormat="Clear"
          enablePasswordRetrieval="true"
          />
        </providers>
      </membership>
  </system.web>
</configuration>
代码清单1-35中的配置文件将以明文形式而非散列方式存储用户的密码。此外,该配置清单还启用了密码找回功能。
1.7.2  要求安全提示问题和答案
使用CreateUserWizard控件进行注册时,会要求填写一个安全提示问题及答案。PasswordRecovery控件将会显示一个包含安全提示问题的表单。如果不能提交正确的问题答案,系统就不会发送密码。
如果在进行找回密码操作时,并不希望用户回答安全提示问题,那么就修改Membership接口提供器的配置。代码清单1-36中Web配置文件的requiresQuestionAndAnswer属性就设置为false。
代码清单1-36  Web.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <authentication mode="Forms" />
    <membership defaultProvider="MyMembership">
      <providers>
        <add
          name="MyMembership"
          type="System.Web.Security.SqlMembershipProvider"
          connectionStringName="LocalSqlServer"
          requiresQuestionAndAnswer="false"
          />
        </providers>
      </membership>
  </system.web>
</configuration>
1.7.3  在PasswordRecovery控件中使用模板
如果你希望能完全自定义PasswordRecovery控件的外观,那么就需要使用模板。PasswordRecovery控件支持下列三类模板:
q UserNameTemplate
q QuestionTemplate
q SuccessTemplate
代码清单1-37中的页面展示了如何使用这三类模板。
代码清单1-37  PasswordRecoveryTemplate.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <style type="text/css">
        html
        {
            font:12px Arial,Sans-Serif;
        }
        h1
        {
            font:bold 16px Arial,Sans-Serif;
            color:DarkGray;
        }
    </style>
    <title>PasswordRecovery Template</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:PasswordRecovery
        id="PasswordRecovery1"
        Runat="server">
        <MailDefinition
            From="Admin@YourSite.com"
            Subject="Password Reminder"
            BodyFileName="PasswordRecovery.txt" />
        <UserNameTemplate>
        <h1>User Name</h1>
        <asp:Label
            id="FailureText"
            EnableViewState="false"
            ForeColor="Red"
            Runat="server" />
        <br />
        <asp:Label
            id="lblUserName"
            Text="Enter your user name:"
            AssociatedControlID="UserName"
            Runat="server" />
        <br />
        <asp:TextBox
            id="UserName"
            Runat="server" />
        <br />
        <asp:Button
            id="btnSubmit"
            Text="Next"
            CommandName="Submit"
            Runat="server" />   
        </UserNameTemplate>   
        <QuestionTemplate>
        <h1>Security Question</h1>
        <asp:Label
            id="FailureText"
            EnableViewState="false"
            ForeColor="Red"
            Runat="server" />
        <br />
        <asp:Label
            id="Question"
            Text="Enter your user name:"
            AssociatedControlID="Answer"
            Runat="server" />
        <br />
        <asp:TextBox
            id="Answer"
            Runat="server" />
        <br />
        <asp:Button
            id="btnSubmit"
            Text="Next"
            CommandName="Submit"
            Runat="server" />   
        </QuestionTemplate>
        <SuccessTemplate>
        <h1>Success</h1>
        An email has been sent to your registered
        email account that contains your user name
        and password.
        </SuccessTemplate>
    </asp:PasswordRecovery>
   
    </div>
    </form>
</body>
</html>
UserNameTemplate中必须包含一个ID为UserName的控件。如果要显示错误提示信息,那么还需要包含一个ID为FailureText的文本显示控件。该模板还必须包含一个CommandName值为Submit的Button控件。
QuestionTemplate中必须包含ID分别为Question和Answer的两个控件。作为可选的设置项,如果要显示错误提示信息,那么就要包含一个ID为FailureText的文本显示控件。这个模板也必须包含一个CommandName值为Submit的Button控件。
而SuccessTemplate模板则不需要专门指定任何含有特定属性值的控件。
需要注意的是,代码清单1-37中的PasswordRecovery控件包含了用来指定自定义电子邮件通知信息的MailDefinition属性,该邮件通知信息包含在代码清单1-38中的文本文件中。
代码清单1-38  PasswordRecovery.txt
Here's your login information:
  user name: <%UserName%>
  password: <%Password%>

使用该控件恢复密码设置总结:

1.web.config设置(membership):

<membership defaultProvider="SQLMembershipProvider">
        <providers>
          <add name="SQLMembershipProvider"
               type="System.Web.Security.SqlMembershipProvider"
               connectionStringName="SQLMembershipConnString"
               applicationName=".NET Pet Shop 4.0"
               enablePasswordRetrieval="false"  //该设置为true代表可以找到原始密码,false代表只能重新生    成密码
               enablePasswordReset="true" 
               requiresQuestionAndAnswer="true" //该设置为true代表可以通过问答来恢复密码
               requiresUniqueEmail="false"
               minRequiredNonalphanumericCharacters="0"

                passwordFormat="Clear"/>  //注意密码加密方式只有为Clear或者Encrypted时才能恢复密码
          
        </providers>
      </membership>

2.web.config设置(system.net)

<system.net>    
    <mailSettings>
      <smtp from="powerlei@126.com">  //这里为发送邮件的邮箱
        <network host="smtp.126.com" password="*******" userName="powerlei" /> //邮箱用户名和密码,还有发送邮件服务器
      </smtp>
    </mailSettings>
  </system.net>

 
  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值