14.3使用登录控件
14.3 使用登录控件
在网站中,常见功能包括用户登录、创建新用户、显示登录状态、显示登录用户名、更新或重置密码等,在ASP.NET中,工具箱提供了一组“登录”控件,无须编写任何代码就能实现相应的用户界面和功能,默认情况下,登录控件与ASP.NET成员资格和ASP.NET Forms身份验证集成,以帮助实现网站的用户身份验证过程的自动化,如图14-14所示。
图14-14 登录控件
14.3.1 Login控件
Login控件显示用于执行用户身份验证的用户界面,如图14-15所示。Login控件包含用于用户名和密码的文本框和一个复选框,该复选框指示用户是否需要服务器使用ASP.NET成员资格存储标识并当下次访问该站点时自动进行身份验证。
图14-15 Login控件界面
Login控件用于自定义显示、自定义消息的属性和指向其他页的链接,在那些页面中用户可以更改密码或找回忘记的密码。Login控件可用作主页上的独立控件,或者在专门的登录页上使用它。
Login控件的常用属性如表14-3所示。
表14-3 Login控件常用属性
如果同时使用Login控件和ASP.NET成员资格,可以不编写执行身份验证的代码。如果想创建自己的身份验证逻辑,必须处理Login控件的Authenticate事件并添加自定义身份验证代码。当用户使用Login控件登录到网站时,Authenticate引发事件。自定义身份验证方案可以使用Authenticate事件验证用户。
当用户提交用户的登录信息时,Login控件首先引发LoggingIn事件,然后引发Authenticate事件,最后引发LoggedIn事件。
代码如下:
然后,编写OnAuthenticate事件处理程序。
14.3.2 LoginStatus控件
LoginStatus控件为没有通过身份验证的用户显示登录链接,为通过身份验证的用户显示注销链接。登录链接将用户带到登录页,注销链接将当前用户的标识重置为匿名用户。从网站注销的操作会清除用户的身份验证状态,如果使用Cookie,该操作还会清除用户的客户端计算机中的Cookie。以后每次访问网站时,LoginStatus控件都会显示登录提示。LoginStatus控件有“登录”和“注销”两种状态,具体为哪种状态是由Page对象的Request属性的IsAuthenticated属性决定。
向网页中添加LoginStatus控件可按下列步骤进行。
(1)将“LoginStatus”控件从“工具箱”任务窗格拖放到网页上,如图14-16所示。
图14-16 LoginStatus控件界面
(2)设置“LoginText”和“LoginImageUrl”属性自定义“LoginStatus”控件的外观。若要设置上述和其他用于确定“LoginStatus”控件的外观属性,需使用“标记属性”任务窗格。
图14-17 LoginStatus属性定义
LoginStatus控件的常用属性如表14-4所示。
表14-4 LoginStatus控件的常用属性
LoginStatus控件可以显示文本,也可以显示图像链接,具体情况取决于LoginImageUrl和LogoutImageUrl属性的设置。对于上述任何一种或两种状态,都可以为其显示文本,也可以为其显示图像。
注销行为由LogoutAction属性控制,该属性指定刷新当前页,将用户重定向到应用程序配置设置中定义的登录页,还是将用户重定向到LogoutPageUrl属性所指定的页。
14.3.3 LoginView控件
使用LoginView控件可以向匿名用户和登录用户显示不同的信息,该控件显示下面两个模板之一:AnonymousTemplate或LoggedInTemplate。
向网页中添加LoginView控件可按下列步骤进行。
(1)将LoginView控件从“工具箱”面板拖到网页上,如图14-18所示。
图14-18 LoginView控件界面
(2)默认情况下,LoginView控件包含两个可向用户显示的模板视图。第一个是“AnonymousTemplate”,当用户未登录时将显示该模板。第二个模板是“LoggedInTemplate”,该模板定义当用户已登录时显示的用户界面。
LoginStatus控件的常用属性如表14-5所示。
表14-5 LoginStatus控件的常用属性
LoginView控件还包括ViewChanging和ViewChanged的事件,可以为这些事件编写当用户登录和更改状态时的处理程序。
14.3.4 PasswordRecovery控件
使用PasswordRecovery控件可以根据创建账户时所使用的电子邮件地址找回用户密码。PasswordRecovery控件会向用户发送包含密码的电子邮件,在这种情况下,PasswordRecovery控件生成一个新密码,而不是将原始密码发送给用户,也可以对成员身份进行配置,以加入一个安全提示问题,用户必须回答此问题才能找回密码。这样,PasswordRecovery控件将在找回密码前提问该问题并核对答案。
向网页中添加PasswordRecovery控件可按下列步骤进行。
(1)将PasswordRecovery控件从“工具箱”面板拖到网页上,如图14-19所示。
图14-19 PasswordRecovery控件界面
(2)选择模板视图:PasswordRecovery控件包含三个可向用户显示的模板视图。第一个是“用户名”模板视图,该模板允许用户输入用户名。第二个模板是“问题”模板,用户可以使用该模板回答预定义的问题以确认身份。“成功”模板则用于定义当用户密码发送给用户后显示的用户界面。
PasswordRecovery控件要求应用程序能将电子邮件转发给简单邮件传输协议(SMTP)服务器。用户可以通过设置MailDefinition属性自定义发送给用户电子邮件的文本和格式。
PasswordRecovery控件的常用属性如表14-6所示。
表14-6 PasswordRecovery控件的常用属性
PasswordRecovery文本框表示控件的属性,如Answer和Question,在页生命周期的所有阶段进行访问。控件将采用最终用户所做的所有更改,文本框触发的TextChanged事件。
14.3.5 ChangePassword控件
通过ChangePassword控件,用户可以更改自己的密码。用户必须先提供原始密码,然后创建并确认新密码。如果原始密码正确,用户密码则更改为新密码,该控件还支持发送关于新密码的电子邮件。
ChangePassword控件适用于通过身份验证和未通过身份验证的用户。如果用户未通过身份验证,该控件提示用户输入登录名。如果用户已通过身份验证,该控件将以用户的登录名填充文本框。
向网页中添加ChangePassword控件可按下列步骤进行。
(1)将ChangePassword控件从“工具箱”面板拖到网页上,如图14-20所示。
图14-20 ChangePassword控件的界面
(2)设置视图。ChangePassword控件有两个模板视图:第一个是“更改密码”视图,要求先输入当前密码,然后用户需两次输入新的密码以进行确认。如果允许用户在未登录的情况下更改其密码,可将DisplayUserName属性设置为true,以在“更改密码”视图中显示UserName控件。UserName控件用于让用户提供其注册的用户名。如果在更改密码时出现错误,“更改密码”视图中将显示一条错误消息,并允许用户重试此操作。第二个视图是“成功”,它定义当用户密码更改成功后显示的用户界面。
PasswordRecovery控件的常用属性如表14-7所示。
表14-7 PasswordRecovery控件的常用属性
ChangePassword控件使用MembershipProvider属性中定义的成员资格提供程序来更改该网站的成员资格提供程序数据存储区中存储的密码。如果未指定成员资格提供程序,ChangePassword控件将使用Web.config文件的Membership节中定义的默认成员资格提供程序。
14.3.6 CreateUserWizard控件
CreateUserWizard控件用于收集潜在用户所提供的信息。默认情况下,CreateUserWizard控件会将新用户添加到ASP.NET成员资格系统中。CreateUserWizard控件可收集下列用户信息。
用户名。
密码。
密码确认。
电子邮件地址。
安全提示问题。
安全提示问题的答案。
这些信息用来对用户进行身份验证并找回用户密码。
向网页中添加CreateUserWizard控件可按下列步骤进行。
(1)将CreateUserWizard控件从“工具箱”面板拖到网页上,如图14-21所示。
图14-21 CreateUserWizard控件界面
(2)设置步骤。默认情况下,CreateUserWizard控件包含两个步骤:“注册新账户”和“完成”。“注册新账户”步骤(在“CreateUserWizard任务”菜单中也称为“创建用户”步骤)允许用户输入创建账户所需的信息。“完成”步骤用于确认账户已创建(或未创建)的信息。
下面示例演示了CreateUserWizard控件的一个典型ASP.NET声明。