65.9K
CodeProject 正在变化。 阅读更多。
Home

构建带有成员资格和用户登录的网站

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.90/5 (87投票s)

2009年3月24日

CPOL

19分钟阅读

viewsIcon

385777

downloadIcon

7948

关于使用成员资格和用户登录构建网站的文章

引言

网站的一项基本要求是只允许某些会员或只有经过身份验证的用户访问特定页面并执行所需操作。在这种情况下,应用程序必须向用户询问他/她的用户名和密码。应用程序还必须包含一种向匿名用户(未登录/未经过身份验证/访客用户)隐藏信息的方法。在本文中,我将向您展示如何使用ASP.NET控件和ASP.NET会员服务来创建一个执行所有这些职责的应用程序。

本文包含什么?

  1. 如何配置应用程序以包含 ASP.NET 会员服务。
  2. 如何定义用户。
  3. 如何使用登录控件获取用户凭据并向已登录用户显示信息
  4. 如何保护应用程序中的一个或多个页面,以便只有已登录 (经过身份验证的) 用户才能访问它们。
  5. 如何允许新用户 (访客用户) 在您的网站上注册。
  6. 如何允许会员 (经过身份验证的) 更改和重置他们的密码。

您需要什么?

  1. Microsoft Visual Studio 2005 专业版
  2. 本地安装在您的计算机上的 Microsoft Internet Information Services (IIS)(有关更多信息,请参阅下一节 “如何安装IIS”
  3. 本地安装在您的计算机上的 SQL Server Express Edition
  4. Microsoft Data Access Components (MDAC) 版本 2.7 或更高版本。如果您使用的是 Microsoft Windows XP 或 Windows Server 2003,您已经拥有 MDAC 2.7。但是,如果您使用的是 Microsoft Windows 2000,您可能需要升级计算机上已安装的 MDAC。有关 “Microsoft Data Access Components (MDAC) 安装”,请访问 此链接
  5. 访问可以转发电子邮件的电子邮件服务器。(服务器不必能够接收消息。)IIS 包括默认的 SMTP 虚拟服务器,一个适用于本文的邮件服务器。有关配置此服务器,请访问 此链接

如何安装 IIS?

  1. 点击 开始菜单,选择 控制面板
  2. 点击 切换到经典视图 链接
  3. 点击 添加或删除程序 图标
  4. 点击 添加/删除 Windows 组件 图标。 Windows 组件向导 将显示在屏幕上,如下图所示

    Windows components wizard

  5. 双击 Internet Information Services (IIS) 选项

    Windows components wizard

  6. 选择所有复选框并点击 确定 按钮
  7. 点击 下一步 按钮;它开始配置选定的组件
  8. 如果一切顺利;您会收到类似 “您已成功完成 Windows 组件向导” 的消息
  9. 最后点击 完成 按钮

构建网站

按照以下步骤构建一个新网站和您的第一个网页。

构建本地 IIS 网站

  1. 打开 Visual Studio 2005
  2. 文件 菜单上,点击 新建 选项,然后在子菜单上点击 网站 选项。 新建网站 对话框将出现。
  3. Visual Studio 已安装模板 下,选择 ASP.NET 网站
  4. 位置 列表框中,选择 HTTP。点击 浏览选择位置 对话框将出现。
  5. 选择 本地 IIS
  6. 打开 本地 Web 服务器
  7. 选择 默认 网站。
  8. 点击网站列表上方的 创建新 Web 应用程序 图标 (),然后将新网站命名为 membership。
  9. 点击 打开选择位置 对话框关闭。
  10. 语言 框中,点击您喜欢的编程语言(在本文中,我使用 C#)。您选择的编程语言将成为您网站的默认语言,但您可以单独为每个页面设置编程语言。
  11. 新建网站 对话框中点击 确定Visual Studio 将创建网站和一个名为 Default.aspx 的新页面。

配置会员

在本文稍后,我将解释如何将页面放入受保护的子目录中。您现在必须创建该子目录,以便稍后可以为其配置安全性。

为网站添加新文件夹

  1. 解决方案资源管理器 中,右键点击您的网站名称 (https:///membership/),然后点击 新建文件夹 选项
  2. 将文件夹命名为 MemberPages

在使用 ASP.NET 会员功能之前,您必须配置您的应用程序以启用会员功能并设置用户。您可以使用网站管理工具,它提供了一个类似向导的界面来设置配置。当您完成设置向导时,一个名为 ASPNETDB.MDF 的 SQL Server 数据库将在项目的 App_Data 文件夹中创建。

为此,您将定义一个单一用户。

创建会员用户的步骤

  1. 网站 菜单上,点击 ASP.NET 配置
  2. 选择 安全性 选项卡,点击 使用安全设置向导分步配置安全性 链接,然后点击 下一步 按钮。
  3. 进入向导的第2步,选择 从 Internet 选项。向导会显示一个页面,您可以在其中选择您的网站将使用的 身份验证 方法。此选项指定您的应用程序将使用 表单身份验证,用户将使用登录页面登录应用程序。我将在本文稍后解释如何创建它。

ASP.Net Admin web site

  1. 点击 下一步。向导会显示一条消息,说明用户信息将使用高级提供程序设置存储。默认情况下,会员信息存储在您网站 App_Data 文件夹中的 Microsoft SQL Server Express 数据库文件中
  2. 点击 下一步。向导显示一个 创建角色 的选项。我将在本文稍后单独解释如何执行此步骤。
  3. 清除此网站的 启用角色 复选框,然后点击 下一步。向导会显示一个页面,您可以在其中创建新用户。
  4. 输入定义您的应用程序用户的信息。使用以下值作为指南(您可以使用任何您喜欢的值,但请务必记下您的输入以备本文稍后使用),如下图所示

    Create User

    • 用户名 您的姓名(无空格),或示例姓名。
    • 密码 一个密码。需要一个强密码(包含大小写字母、标点符号,并且至少八个字符长)。
    • 电子邮件 您的个人电子邮件地址。
    • 安全问题和安全答案 输入一个问题和答案,如果以后需要恢复密码,可以使用它们。
  5. 点击 创建用户 按钮。向导会显示一个确认页面。

为子目录添加新的访问规则

在本文前面,您创建了一个名为 MemberPages 的文件夹。在本文的这一部分,我将解释如何创建一个规则,确保只有已登录用户才能访问该文件夹中的页面。

为 MemberPages 子目录设置访问规则

  1. 在向导中,点击 下一步。向导显示一个页面,允许您创建访问规则。
  2. 添加新访问规则 框中,展开您的网站节点,如下图所示

    Add new access rule wizard

  3. 选择您之前创建的文件夹 MemberPages
  4. 规则应用于 下,选择 匿名用户 单选按钮选项。
  5. 权限 下,选择 拒绝 单选按钮选项。您正在创建的规则拒绝匿名用户(即未登录的用户)的访问。
  6. 点击 添加此规则。新规则将显示在下面的网格中。当用户从 MemberPages 子目录请求页面时,将检查规则以确定用户是否被允许访问该页面。

    Windows components wizard

  7. 点击 完成 按钮。您现在已完成向导。向导关闭,您返回到网站管理工具的“安全”选项卡。

配置应用程序以发送电子邮件

作为本文的一个组成部分,应用程序需要能够发送电子邮件。要发送电子邮件,您的应用程序必须能够访问 简单邮件传输协议 (SMTP) 服务器,它将电子邮件从您的应用程序转发到电子邮件收件人。IIS 包含默认的 SMTP 虚拟服务器作为可选组件,这适用于本文。

配置应用程序以使用特定的 SMTP 服务器

  1. 在网站管理工具中,点击 应用程序 选项卡。
  2. SMTP 设置 下,点击 配置 SMTP 电子邮件设置。该工具将显示一个页面,您可以在其中配置电子邮件。
  3. 如果您正在使用计算机上的 SMTP 虚拟服务器,请在 服务器名称 中输入 localhost;否则,请输入适当的服务器名称。
  4. 根据您的 SMTP 服务器的要求,包括 端口号 和身份验证信息,如下图所示

Windows components wizard

  1. 发件人 框中,输入一个有效的电子邮件地址。
  2. 点击 保存,并在确认页面中点击 确定。网站管理工具将创建一个 Web.config 文件(如果之前不存在),其中包含您所做的设置,如下所示
    < ?xml version="1.0" encoding="utf-8"?>
    < configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
        < system.web>
            < authorization >
                < deny users="?" />
            < /authorization >
            < authentication mode="Forms" />
        < /system.web>
        < system.net>
            < mailSettings>
                < smtp from="mymail@mail.domain.com">
                    < network host="localhost" password="" userName="" />
                < /smtp>
            < /mailSettings>
        < /system.net>
    < /configuration>

    在您刷新视图之前,Web.config 文件不会出现在解决方案资源管理器中。

  3. 关闭 网站管理工具

如何让用户登录?

作为应用程序的一部分,您需要建立用户的身份,以便应用程序可以执行以下操作:

  1. 根据用户身份显示或隐藏信息,以及
  2. 为了获取用户身份,您让用户登录

在本文中,我将向您展示如何在主页上添加一个链接,将用户带到登录页面,然后您将创建登录页面。

创建带登录按钮的主页

  1. 打开您网站的 Default.aspx 页面。
  2. 切换到 设计视图
  3. 输入静态文本,例如 欢迎访问我的网站,并在 格式 工具栏中,使用 块格式 下拉列表将文本格式化为 标题 1
  4. 从工具箱的 登录 组中,将 LoginStatus 控件拖到页面上,如下图所示

    Windows components wizard

默认情况下, LoginStatus 控件显示为链接。当用户点击它时,应用程序会显示一个 登录 页面。您现在可以创建登录页面。

创建登录页面

  1. 解决方案资源管理器 中,右键点击您的 Web 应用程序 (https:///membership) 并选择 添加新项。将一个名为 Login.aspx 的 Web 表单添加到您的网站。
  2. Login.aspx 页面中,切换到 设计视图
  3. 从工具箱的 登录 组中,将一个 Login 控件拖到页面上,如下图所示

    Windows components wizard

显示登录错误

登录 控件包含验证功能,可帮助用户输入正确的信息。您可以通过向页面添加 ValidationSummary 控件来为登录错误提供更多信息。

显示详细登录错误

  1. 从工具箱的 验证 组中,将一个 ValidationSummary 控件拖到页面上。
  2. ValidationSummary 控件的 属性窗口 中,将 ValidationGroup 属性设置为 Login1,这是您之前添加的 Login 控件的默认 ID,如下图所示

    Windows components wizard

显示已登录用户的信息

现在我将向您展示如何修改主页以根据用户是否登录来定制显示。 匿名 用户将看到一条标准消息,邀请他们登录。已登录用户将看到一条消息,欢迎他们使用其已登录名称。

修改已登录用户的显示

  1. 打开 Default.aspx 页面。
  2. 从工具箱的 登录 组中,将一个 LoginView 控件拖到页面上。 LoginView 控件以其 AnonymousTemplate 模板打开显示。此模板允许您定义用户在登录之前将看到的内容。
  3. 点击 LoginView 控件的 编辑 区域以激活编辑。
  4. LoginView 控件的 AnonymousTemplate 模板的编辑区域中,键入 您好!您尚未登录。点击登录链接以登录
  5. LoginView 任务面板中,在视图列表中,点击 LoggedInTemplate。如果您没有看到 LoginView 任务面板,请右键点击 LoginView 控件的标题并选择 显示智能标记。您现在正在定义将显示给已登录用户的内容。
  6. 点击 LoginView 控件的 编辑 区域以激活编辑,然后输入 您已登录。欢迎
  7. 从工具箱的登录组中,将一个 LoginName 控件拖到文本后面的模板中。

测试登录

您现在可以测试应用程序的登录功能。

测试登录

  1. 解决方案资源管理器 中,右键点击 Default.aspx 并点击 设为起始页。这将配置网站,以便当您运行网站时,Default.aspx 页面首先出现。
  2. 按 CTRL+F5 运行网站。主页 (Default.aspx) 显示在浏览器中。
  3. 点击 登录 链接。您创建的登录页面将显示。
  4. 输入您在本文前面创建的用户的登录名(在本文中,我创建的用户名为 Shreekumar)。
  5. 输入用户名和密码,然后点击 登录。如果您输入了正确的凭据,您将返回到主页。页面现在显示一个 注销 链接、您的用户名以及您为已登录用户定义的欢迎消息,如下图所示

    Windows components wizard

  6. 关闭浏览器。

限制会员专用页面的访问

在本文前面,您创建了 MemberPages 子目录并创建了一条访问规则,限制对该子目录中页面的访问。在本文的这一部分,我将向您展示如何将页面添加到 受保护的子目录 并测试访问规则。

创建会员专用页面

  1. 解决方案资源管理器 中,右键点击 MemberPages 文件夹,点击 添加新项,然后添加一个名为 Members.aspx 的新 Web 表单。
  2. 设计视图 中,向页面添加文本,例如 欢迎,会员! 或者您可以添加其他内容。现在您可以从主页添加一个指向会员专用页面的链接。将会员专用页面链接放在 LoginView 控件的已登录模板中。这样,您网站的访客在登录之前不会看到该链接。

添加会员专用页面的链接

  1. 打开 Default.aspx 页面。
  2. 从工具箱的“标准”组中,将一个 HyperLink 控件拖到 LoginView 控件上,紧挨着 UserName 控件。
  3. HyperLink 控件的 属性窗口 中,将 Text 属性设置为 Members page,将 NavigateUrl 属性设置为 ~/MemberPages/Members.aspx,以指向您之前创建的页面。

测试会员专用页面

您可以通过以已登录用户身份访问来测试会员专用页面。

测试会员专用页面

  1. 按 CTRL+F5 运行网站。
  2. 登录 页面中,输入您之前使用的用户名和密码。您将被重定向到 (Default.aspx) 主页。
  3. 点击 会员页面 链接。您将被重定向到 Members.aspx 页面,因为您登录的用户名已被授权访问该页面,如下图所示

Windows components wizard

  1. 关闭浏览器窗口。

新用户注册

在本文的第一部分,您使用 网站管理工具 创建了一个用户。这种方法在您处理一个很小的、已定义的用户列表时很有用;但在许多网站中,用户被允许自行注册。 ASP.NET 包含 CreateUserWizard 控件,它执行您之前使用 网站管理工具 执行的相同任务。

在本文的这一部分,我将向您展示如何添加一个功能,允许用户在您的网站上 注册。首先,您将创建一个注册页面。

创建注册页面

  1. 解决方案资源管理器 中,右键点击您的网站名称 (https:///membership),点击 添加新项,然后添加一个名为 Register.aspx 的新 Web 表单。
  2. Register.aspx 页面中,切换到 设计视图 并输入静态文本,例如 注册到页面。在 格式工具栏 中,使用 块格式 下拉列表将文本格式化为 标题 1
  3. 从工具箱的 登录 组中,将一个 CreateUserWizard 控件拖到页面上,如下图所示

    Windows components wizard

  4. CreateUserWizard 控件的 属性窗口 中,将 ContinueDestinationPageUrl 属性设置为 ~/Default.aspx
  5. 这将配置控件,以便当用户创建用户后点击“继续”时,控件将返回主页。
  6. 从工具箱的“标准”组中,将一个 HyperLink 控件拖到页面上。在 HyperLink 控件的 属性窗口 中,将 Text 属性 设置为 Home,将 NavigateUrl 属性设置为 ~/Default.aspx

现在我将向您展示如何为主页添加一个显示注册页面的链接。为此,假设您只想向未登录用户 (访客用户) 显示注册链接。

在主页上创建注册链接

  1. 打开 Default.aspx 页面。
  2. 右键点击之前添加的 LoginView 控件。选择 显示智能标记。在 LoginView 任务面板中,从“视图”列表框中选择 AnonymousTemplate 以激活匿名模板中的编辑。
  3. 从工具箱的标准组中,将一个 HyperLink 控件拖到 匿名模板 中。在 HyperLink 控件的 属性窗口 中,将 Text 属性 设置为 Register,将 NavigateUrl 属性设置为 ~/Register.aspx。注册链接将仅显示给未登录的用户。

测试注册

  1. 按 CTRL+F5 运行网站并显示 Default.aspx 页面。由于您未登录,因此会显示包含“注册”链接的页面。
  2. 点击 注册 链接。将显示注册页面。
  3. 在文本框中,输入新的用户名、密码、电子邮件地址以及安全问题和答案,如下图所示

    Windows components wizard

  4. 点击 创建用户。显示确认消息。
  5. 点击 继续 按钮。您将以已登录用户的身份返回主页。请注意,“登录”链接已更改为“注销”,并且“登录”控件中显示的信息来自 LoggedInTemplate 属性,而不是 AnonymousTemplate 属性。
  6. 点击 注销 链接。页面会更改为显示匿名用户的信息。
  7. 点击 登录 链接。
  8. 输入您刚刚创建的用户的凭据。您将以新用户身份登录。
  9. 关闭浏览器窗口。

更改用户密码

用户有时可能希望更改密码,而手动执行此任务通常是不切实际的。因此,您可以使用另一个 ASP.NET 控件允许用户自行更改密码。要更改密码,用户必须知道他们现有的密码。

现在我将向您展示如何添加一个页面,让已登录用户可以更改他们的密码。

创建密码更改页面

  1. 解决方案资源管理器 中,右键点击 MemberPages 文件夹,点击 添加新项,然后添加一个名为 ChangePassword.aspx 的新 Web 表单。
  2. 您将页面放在会员专用文件夹中,因为只有已登录 (经过身份验证的) 用户才能更改其密码。
  3. ChangePassword.aspx 页面中,切换到 设计视图 并输入静态文本,例如 更改用户密码。在 格式工具栏 中,使用 块格式 下拉列表将文本格式化为 标题 1
  4. 从工具箱的 登录 组中,将一个 ChangePassword 控件拖到页面上,如下图所示

    Windows components wizard

  5. ChangePassword 控件的 属性窗口 中,将 ContinueDestinationPageUrl 属性设置为 ~/Default.aspx。这将配置控件,以便当用户更改密码后点击“继续”时,控件将返回主页。

现在我将向您展示如何为主页添加一个显示密码更改页面的链接。您将仅向已登录用户提供该链接。

在主页上创建密码更改链接

  1. 打开 Default.aspx 页面。
  2. 右键点击 LoginView 控件,然后点击 显示智能标记。在 LoginView 任务菜单的“视图”列表中,点击 LoggedInTemplate
  3. 这将把 LoginView 控件切换到编辑模式,以编辑将显示给已登录用户的内容。
  4. 从工具箱的“标准”组中,将一个 HyperLink 控件拖到编辑区域。在 HyperLink 控件的 属性窗口 中,将 Text 属性设置为 更改密码,将 NavigateUrl 属性设置为 ~/MemberPages/ChangePassword.aspx
  5. 更改密码 链接将仅显示给已登录用户,这与您之前创建的“注册”链接相反。

测试密码更改

  1. 按 CTRL+F5 运行网站。
  2. Default.aspx 页面中,点击 登录 链接并以您创建的用户之一登录。完成后,您将以已登录用户身份返回主页。
  3. 点击 更改密码 链接。
  4. 在密码更改页面中,输入旧密码和新密码,然后点击 更改密码
  5. 点击 继续
  6. 在主页上,点击 注销
  7. 点击 登录 链接。
  8. 输入新密码。您已使用新密码登录。
  9. 关闭浏览器窗口。

恢复密码

众所周知,用户经常会忘记密码。此时我将向您展示如何向您的网站添加一个 密码恢复 页面,以便他们可以再次登录您的网站。 密码恢复 可以采取两种形式

  1. 您可以向用户发送他们选择的密码(或者您在设置网站时为他们创建的密码)。此选择要求网站使用可逆加密存储密码。
  2. 您可以向用户发送一个新密码,他们可以使用您之前创建的“更改密码”页面进行更改。如果网站使用不可逆加密方案(例如哈希)存储密码,则此选项很有用。

默认情况下, ASP.NET 会员系统 通过哈希处理密码来保护它们,这意味着密码无法恢复。因此,对于本文的这一部分,您的网站将向用户发送一个新密码。

添加密码恢复

  1. 解决方案资源管理器 中,右键点击您的网站名称 (https:///membership),点击 添加新项,然后添加一个名为 RecoverPassword.aspx 的新 Web 表单。
  2. RecoverPassword.aspx 页面中,切换到 设计视图 并输入静态文本,例如 重置我的密码。在 格式 工具栏中,使用 块格式 下拉列表将文本格式化为 标题 1
  3. 从工具箱的 登录 组中,将一个 PasswordRecovery 控件拖到页面上,如下图所示

    Windows components wizard

  4. 从工具箱的“标准”组中,将一个 HyperLink 控件拖到页面上。在 HyperLink 控件的 属性窗口 中,将 Text 属性 设置为 Home,将 NavigateUrl 属性设置为 ~/Default.aspx
  5. 切换到 Default.aspx 页面。
  6. 右键点击 LoginView 控件,然后点击“显示智能标记”。在 LoginView 任务菜单的“视图”列表中,点击 AnonymousTemplate
  7. 这将把 LoginView 控件切换到编辑模式,以编辑将显示给未登录用户的内容。
  8. 从工具箱的“标准”组中,将一个 HyperLink 控件拖到模板中。在 HyperLink 控件的 属性窗口 中,将 Text 属性设置为 忘记密码?,将 NavigateUrl 属性设置为 ~/RecoverPassword.aspx

测试密码恢复

  1. 按 CTRL+F5 运行网站。
  2. 默认情况下,您未登录,因此您会看到 LoginView 控件的 匿名模板
  3. 点击 忘记密码? 链接。
  4. 出现 RecoverPassword.aspx 页面。
  5. 输入您的用户名并点击 提交。显示安全问题,并提示您输入安全答案,如下图所示

Windows components wizard

  1. 输入答案并点击 提交
  2. 如果您输入了正确的答案,网站将重置您的密码并通过 电子邮件 向您发送新密码。

摘要

有许多主题可以了解更多关于 ASP.NET 会员服务登录控件 的信息。我只介绍了其中一小部分。希望这对所有 初学者 有所帮助。请提供您的反馈和建议。

参考文献

  • MSDN 帮助

历史

  • 2009年3月21日:初始版本
  • 2009年4月21日:添加源代码
© . All rights reserved.