.NET Web高级开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.4 登录控件

成员身份服务本身就显著减少了验证登录和管理用户所需的代码量,此外,还有一系列登录控件使窗体身份验证变得更加容易。它们是一个新的登录控件提供生成块,向站点添加身份验证和基于授权的用户界面,如登录窗体、创建用户的窗体、密码检索,以及已登录的用户或角色的自定义用户界面。这些控件使用ASP.NET 2.0中内置的成员资格服务和角色服务,与站点中定义的用户和角色信息交互。

图1-15 Login控件

登录控件可以与成员身份服务配合使用(在默认情况下,登录控件与ASP.NET成员资格集成,以帮助使网站的用户身份验证过程自动化),也可以不与其配合使用,但它们与该服务之间的集成性非常好,以至于当登录控件与成员身份服务一起使用时,一些基本任务(例如,验证用户名和密码以及用电子邮件发送遗忘的密码,如图1-15所示)通常不必编写任何代码就可以完成。

图1-15中所示的Login控件是登录控件系列的核心控件。除了提供具有高度可自定义性的外观显示以外,它还能够调用Membership.ValidateUser来验证用户名和密码。Login控件还可以调用FormsAuthentication.RedirectFromLoginPage,将用户重定向到他们在被重定向到登录页时尝试到达的页面。然后,FormsAuthentication.RedirectFromLoginPage将发出身份验证Cookie。

在ASP.NET 2.0中有三种常见方式使用此控件,下面分别进行阐述。

1.使用默认的向导控件功能

默认的注册向导的使用向导非常简单,只要一行代码就可以完成:

<asp: CreateUserWizard ID="CreateUserWizardControl" runat="server"/>

无需额外的代码就能够完成用户的注册,会将注册的信息写入到ASPNETDB.MDF数据库中。

2.使用默认ID

但是有时使用默认向导实现的功能过于简单,太死板,没有灵活性。例如用户名,如果要验证用户名必须是字母或者数字,此时利用上面的代码就不能够完成,因此不得不使用模板,或类似如下的代码:

<asp:CreateUserWizard ID="CreateUserWizardControl" runat="server">
    <WizardSteps>
    <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server" Title
="UserInfo">
    <ContentTemplate>
User Name:
    <asp:TextBox runat="server" ID="UserName" ></asp:TextBox>
    <asp:RequiredFieldValidator runat="server" ControlToValidate="UserName"
ValidationGroup="CreateUserWizardControl"
      ErrorMessage="UserName is required." ToolTip="UserName is required."
ID="UserNameRequired"
      Display="Dynamic">
</asp:RequiredFieldValidator>
Password: <asp:TextBox runat="server" TextMode="Password" ID="Password">
</asp:TextBox>
Confirm   Password:<asp:TextBox   runat="server"   TextMode="Password"
ID="ConfirmPassword"></asp:TextBox>
</ContentTemplate>
</asp:CreateUserWizardStep>
    </WizardSteps>
</asp:CreateUserWizard>

在使用上面代码时,请注意系统默认定义的ID,例如用户名使用TextBox的ID只能是UserName,密码使用的TextBox的ID只能够是Password。你查看MSDN以了解CreateUserWizard更多的预定义ID。

3.用户自定义ID

如果觉得使用微软预定义的ID不方便,这时我们就可以自己来定义它。如想让用户的ID为txtName,密码ID为txtPassword,如果你使用自定义的ID,系统将不能够识别,这时你就需要自己获取txtName和txtPassword的Text值了。具体处理较为烦琐。因为您需要做如下步骤:

① 获取用户名;

② 获取密码;

③ 连接数据库;

④ 将输入写入数据库;

⑤ 关闭数据库。

可以看到,不使用系统预定义的功能,你的工作量将大幅度增加。