15.6 安全性相关的控件
15.6.1 ASP.NET登录控件概述
使用ASP.NET 2.0提供的这些控件,我们只需要进行简单的设置而无需写一行代码就能提供“注册”、“登录”、“修改密码”和“取回密码”等与账户密切相关的一些操作。
如图15-26所示,可以看到IDE工具箱中的一套登录控件。
图15-26 ASP.NET登录控件
15.6.2 登录控件
首先添加一个Login.aspx,在页面上放入一个Login控件,然后使用属性窗口对控件进行配置。
<asp:Login ID="Login1" runat="server" CreateUserText="没有注册?"
CreateUserUrl="Register.aspx" PasswordRecoveryText="忘记密码?"
PasswordRecoveryUrl="PasswordRecovery.aspx"/>
CreateUserText属性表示创建用户链接的字符串,CreateUserUrl属性表示创建用户的链接地址,PasswordRecoveryText属性表示取回密码链接的字符串,PasswordRecoveryUrl表示取回密码的链接地址。
然后浏览Login.aspx,界面如图15-27所示。
15.6.3 创建用户向导控件
在创建登录页面的时候,我们配置了注册链接的地址为Register.aspx,因此需要创建一个Register.aspx页面用于注册操作。在页面上放置一个CreateUserWizard控件。
<asp:CreateUserWizard ID="CreateUserWizard1" runat="server"
ContinueDestinationPageUrl="Default.aspx" />
在这里,ContinueDestinationPageUrl属性表示注册完成后转向的页面地址。之后,我们会创建Default.aspx来显示登录名和登录状态等信息。
浏览Default.aspx效果,如图15-28所示。
注意以下几点。
1.在注册后,系统会自动为用户登录。
2.默认情况下密码需要有一定的强度(最短长度为7位,且必须包含1个非字母数字字符),我们可以通过修改Web.config文件来改变这个设定,比如下面的配置段为成员资格指定了一个MyAspNetSqlProvider的Provider,并设定密码最短长度为6位,不需要包含任何非字母数字字符(<system.web>节点下)。
<membership defaultProvider="MyAspNetSqlProvider">
<providers>
<add name="MyAspNetSqlProvider" type="System.Web.Security.
SqlMembershipProvider" connectionStringName="LocalSqlServer"
minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0"
applicationName="/"/>
</providers>
</membership>
当然,也别忘记指定用于成员资格服务的数据库连接字符串(<configuration>节点下)。
<connectionStrings>
<add name="LocalSqlServer" connectionString="data source=."SQLEXPRESS;Integrated
Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
注意:其他有关成员资格的配置请回顾15.5.1节。
15.6.4 密码恢复控件
按照Login控件的PasswordRecoveryUrl属性,新建一个用于密码恢复(取回密码)操作的页面PasswordRecovery.aspx。在页面上放入一个PasswordRecovery控件。整个密码恢复的过程如下。
1.输入用户名。
2.输入该用户密码问题的答案。
3.如果答案正确,那么系统会把新的密码发送到用户的邮箱中。
因此,我们需要在Web.config文件的<configuration>节点下新增SMTP邮件服务器的配置。
<system.net>
<mailSettings>
<smtp from="发件人的邮件地址">
<network host="SMTP邮件服务器名" port="端口(默认25)" password="" userName="" />
</smtp>
</mailSettings>
</system.net>
浏览PasswordRecovery.aspx进行密码找回操作,然后你会收到如图15-29所示的一封邮件:
15.6.5 修改密码控件
用户在登录后可能还会希望进行密码修改操作,现在就来创建一个ChangePassword.aspx页面,然后在页面上放入一个ChangePassword控件。
<asp:ChangePassword ID="ChangePassword1" runat="server" ContinueDestinationPageUrl=
"Default.aspx"/>
在这里,我们设置ContinueDestinationPageUrl属性为Default.aspx,表示在修改密码后让系统转到Default.aspx。修改密码界面如图15-30所示。
15.6.6 其他控件
最后,来完成Default.aspx。除了注册、登录和密码操作外,很多时候我们还有一些其他需求,比如下面的操作。
· 为没有登录的用户提供登录操作,为已经登录的用户提供退出操作。
· 显示已经登录的用户名。
· 为已登录和未登录的用户显示不同的信息。
要实现这三个要求同样不需要写任何代码,我们可以分别使用LoginStatus、LoginName和LoginView控件来完成。
· LoginStatus控件会自动根据用户是否登录来显示登录“链接”或者退出“链接”。当然,你也可以把文字换成图片。
· LoginName控件可以按照一定的格式来显示登录的用户名。
· LoginView控件提供了LoggedInTemplate和AnonymousTemplate等模板,LoggedInTemplate模板中的内容会在登录后显示,而AnonymousTemplate模板中的内容会在未登录时显示。
下面,就在页面上添加这三个控件,并做一定的设置。
<asp:LoginStatus ID="LoginStatus1" runat="server" />
<asp:LoginName ID="LoginName1" runat="server" FormatString="您好:{0}"/>
<asp:LoginView ID="LoginView1" runat="server">
<LoggedInTemplate>
<a href="ChangePassword.aspx">修改密码</a>
</LoggedInTemplate>
<AnonymousTemplate>
<a href="PasswordRecovery.aspx">恢复密码</a>
</AnonymousTemplate>
</asp:LoginView>
页面效果如图15-31所示。
登录前:
登录后:
图15-31 LoginStatus、LoginName和LoginView控件