本章内容
q Login控件概览
q 使用Login控件
q 使用CreateUserWizard控件
q 使用LoginStatus控件
q 使用LoginName控件
q 使用ChangePassword控件
q 使用PasswordRecovery控件
q 使用LoginView控件
q 小结
使用ASP.NET Login控件可以轻易创建网站的用户注册系统,Login控件能用于显示用户注册表单、用户登陆表单、修改密码表单和密码提示表单。
默认情况下,Login控件使用ASP.NET提供的Membership来认证用户、创建新用户以及修改用户属性。在使用Login控件时,完成这些任务不需要编写任何代码。
注解 本书下一章将对ASP.NET Membership进行详细讨论。
本章第一部分将对Login控件作概览性的介绍,学习如何使用密码认证来保护网站的内容,以及如何让用户注册和登陆网站。
本章其余部分将详细介绍如何使用Login控件提供的下列属性:
q Login——用于显示用户登录表单;
q CreateUserWizard——用于显示用户注册表单;
q LoginStatus——用于显示登录或登出链接,该链接类型依赖于当前用户的认证状态;
q LoginName——用于显示当前注册用户的用户名;
q ChangePassword——用于显示修改用户密码的表单;
q PasswordRecovery——用于显示找回用户密码的表单;
q LoginView——用于根据用户认证状态或角色为不同的用户显示自定义内容。
1.1 Login控件概览
除非有机密信息需要保护,否则使用Login控件并不是一件轻松有趣的事。因此,让我们从创建一个需要使用密码进行保护的页面来开始本章的学习。
在应用程序中创建一个名为SecretFiles的文件夹,并将代码清单1-1中的页面放入该文件夹中。
代码清单1-1 SecretFiles\Secret.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">
<title>Secret</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>This Page is Secret!</h1>
</div>
</form>
</body>
</html>
代码清单1-1中的页面没有什么特殊之处,它只是会显示信息This Page is Secret!(这个页面是保密的)。
如果希望通过密码认证来保护页面Secret.aspx,那么就需要对应用程序做两个配置更改:配置认证和授权设置。
首先,要为应用程序开启适当的认证类型。系统在默认情况下会启用Windows认证。但是只有在应用程序根目录下加入代码清单1-2中的Web配置文件,以启用Forms认证后,才能使用Login控件。
代码清单1-2 Web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authentication mode="Forms" />
</system.web>
</configuration>
代码清单1-2中的Web配置文件包含了一个认证节点,该节点有一个mode属性,并且该mode属性的值为Forms。
注解 认证和授权的内容将在本书第2章详细讨论。
在默认情况下,任何用户都可以访问应用程序中的所有页面。如果要在某个文件夹中对访问进行限制,那么就必须配置该文件夹的认证设置。
如果将代码清单1-3中的Web配置文件加入到SecretFiles文件夹中,那么匿名用户就不能再访问该文件夹中的任何页面。
代码清单1-3 SecretFiles\Web.Config
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>
代码清单1-3中的Web配置文件包含了一个授权节点。该节点中包含了一个控制该目录授权角色的列表。代码清单1-3中的单一授权角色将阻止匿名用户访问该文件夹(其属性值?表示匿名用户)。
|
当代码清单1-3中的Web配置文件添加到SecretFiles目录中后,如果这时去尝试访问页面Secret.aspx,那么用户请求将会自动地重定向到一个名为Login.aspx的页面上。因此,接下来需要创建的页面就是Login.aspx(在默认情况下,必须将该页面放置在应用程序的根目录中)。
代码清单1-4的Login.aspx页面中包含了一个Login控件,该控件将自动生成一个用户登录表单(见图1-1)。

图1-1 显示登录表单
代码清单1-4 Login.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">
<title>Login</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Login
id="Login1"
CreateUserText="Register"
CreateUserUrl="~/Register.aspx"
Runat="server" />
</div>
</form>
</body>
</html>
需要注意的是,Login控件包含了一个CreateUserText和一个CreateUserUrl属性。添加这些属性后,Login控件就会显示一个为该应用程序注册新用户的链接。代码清单1-4中Login控件的新建用户链接指向了一个名为Register.aspx的页面,而该页面的定义包含在代码清单1-5中。
代码清单1-5 Register.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">
<title>Register</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:CreateUserWizard
id="CreateUserWizard1"
ContinueDestinationPageUrl="~/SecretFiles/Secret.aspx"
Runat="server" />
</div>
</form>
</body>
</html>
该页面中包含了一个CreateUserWizard控件,该控件会自动创建用户注册表单(见图1-2)。当用户提交了该表单后,应用程序将创建一个新用户,并将用户请求重定向回页面Secret.aspx。

图1-2 显示用户注册表单
注意 默认的ASP.NET Membership接口提供器需要创建一个至少7位的密码,并且密码中还必须要有非数字和文字的字符。因此,secrte_是一个有效的密码,但是secret9却不是。在下一章中,我们将详细介绍如何修改这个默认的密码复杂度要求。
到此为止,需要注意的是,在没有编写一行代码的情况下,我们就已经完成了一个简单的用户注册系统。至于那些存储用户名和密码的所有杂乱细节,都在后台通过ASP.NET Framework自动进行处理。






