连接器和 API 手册  / 第 4 章 MySQL 连接器/NET 开发人员指南  / 4.6 连接器/NET 教程  / 4.6.2 ASP.NET 提供者模型和教程  /  4.6.2.1 教程:连接器/NET ASP.NET 成员资格和角色提供者

4.6.2.1 教程:连接器/NET ASP.NET 成员资格和角色提供者

许多网站都为用户提供了创建用户帐户的功能。然后他们可以登录网站并享受个性化的体验。这需要开发人员创建数据库表来存储用户信息,以及用于收集和处理这些数据的代码。这对开发人员来说是一种负担,并且安全问题有可能会蔓延到开发的代码中。然而,ASP.NET 引入了会员系统。该系统是围绕成员资格、个人资料和角色提供者的概念设计的,它们共同提供了实现用户系统的所有功能,而以前这些功能必须由开发人员从头开始创建。

目前,MySQL Connector/NET 包括用于成员资格(或简单成员资格)、角色、配置文件、会话状态、站点地图和 Web 个性化的 Web 提供程序。

本教程向您展示如何设置 ASP.NET Web 应用程序以使用连接器/NET 成员资格和角色提供程序。它假设您已经安装了 MySQL Server,以及 Connector/NET 和 Microsoft Visual Studio。本教程使用 Connector/NET 6.0.4 和 Microsoft Visual Studio 2008 专业版进行了测试。建议您在本教程中使用 6.0.4 或更高版本。

  1. 使用 MySQL 命令行客户端程序 ( mysql) 或其他合适的工具创建一个新的 MySQL 数据库。数据库使用什么名称并不重要,但要记录下来。您可以在本教程后面构造的连接字符串中指定它。该数据库包含稍后自动为您创建的表,用于存储有关用户和角色的数据。

  2. 在 Visual Studio 中创建一个新的 ASP.NET 网站。如果您不确定如何执行此操作,请参阅 第 4.6.4 节“教程:在实体上使用 LINQ 在 ASP.NET 中进行数据绑定”,其中演示了如何创建一个简单的 ASP.NET 网站。

  3. 添加对网站项目的 MySql.Data引用 。MySql.Web

  4. 在您的系统上找到该machine.config文件,它是 .NET Framework 的配置文件。

  5. 搜索machine.config文件以找到成员资格提供者MySQLMembershipProvider

  6. 添加属性autogenerateschema="true"。相应的部分现在应该类似于以下示例。

    笔记

    为了简洁起见,一些信息被排除在外。

    <membership>
     <providers>
       <add name="AspNetSqlMembershipProvider"
         type="System.Web.Security.SqlMembershipProvider"
         ...
         connectionStringName="LocalSqlServer"
         ... />
       <add name="MySQLMembershipProvider"
         autogenerateschema="true"
         type="MySql.Web.Security.MySQLMembershipProvider, 
               MySql.Web, Version=6.0.4.0, Culture=neutral, 
               PublicKeyToken=c5687fc88969c44d"
         connectionStringName="LocalMySqlServer"
         ... />
     </providers>
    </membership>
    笔记

    连接字符串LocalMySqlServer连接到包含成员数据库的 MySQL 服务器。

    autogenerateschema="true"属性将导致 Connector/NET 静默创建或升级数据库服务器上的模式,以包含存储成员信息所需的表。

  7. 现在需要创建上一步中引用的连接字符串。将网站文件加载web.config 到 Visual Studio 中。

  8. 找到标记为 的部分 <connectionStrings>。添加以下连接字符串信息。

    <connectionStrings>
      <remove name="LocalMySqlServer"/>
      <add name="LocalMySqlServer"
           connectionString="Datasource=localhost;Database=users;uid=root;pwd=password"
           providerName="MySql.Data.MySqlClient"/>
    </connectionStrings>

    指定的数据库是在第一步中创建的数据库。您也可以使用现有的数据库。

  9. 此时构建解决方案以确保不存在错误。这可以通过从主菜单中选择BuildBuild Solution或按F6来完成。

  10. ASP.NET 支持本地和远程身份验证用户的概念。通过本地身份验证,用户在尝试访问网站时会使用其 Windows 凭据进行验证。这在 Intranet 环境中很有用。通过远程身份验证,系统会在用户访问网站时提示他们提供登录详细信息,并根据存储在数据库服务器(如 MySQL 服务器)中的成员信息检查这些凭据。您现在将看到如何选择这种形式的身份验证。

    启动 ASP.NET 网站管理工具。这可以通过单击解决方案资源管理器中的小锤子/地球图标来快速完成。您还可以通过 从主菜单中 选择网站然后选择ASP.NET 配置来启动此工具。

  11. 在 ASP.NET 网站管理工具中单击 安全选项卡并执行以下操作:

    1. 单击用户身份验证类型 链接。

    2. 选择来自互联网选项。该网站现在需要提供一个表格以允许用户输入他们的登录详细信息。详细信息将根据存储在 MySQL 数据库中的成员信息进行检查。

  12. 您现在需要指定要使用的角色和成员身份提供程序。单击提供商选项卡并执行以下操作:

    1. 单击为每个功能选择不同的提供商(高级)链接。

    2. 对于成员提供者,选择 MySQLMembershipProvider选项,对于角色提供者,选择 MySQLRoleProvider选项。

  13. 在 Visual Studio 中,通过 从主菜单中 依次单击“生成”和“重建解决方案”来重建解决方案。

  14. 检查是否已创建必要的模式。这可以使用mysql命令 解释器 SHOW DATABASES;来 实现。SHOW TABLES;

    mysql> SHOW DATABASES;
    +---------------------+
    | Database            |
    +---------------------+
    | information_schema  |
    | mysql               |
    | test                |
    | users               |
    | world               |
    +---------------------+
    5 rows in set (0.01 sec)
    
    mysql> SHOW TABLES;
    +---------------------------+
    | Tables_in_users           |
    +---------------------------+
    | my_aspnet_applications    |
    | my_aspnet_membership      |
    | my_aspnet_profiles        |
    | my_aspnet_roles           |
    | my_aspnet_schemaversion   |
    | my_aspnet_users           |
    | my_aspnet_usersinroles    |
    +---------------------------+
    7 rows in set (0.00 sec)
  15. 假设一切都存在且正确,您现在可以为您的 Web 应用程序创建用户和角色。最简单的方法是使用 ASP.NET 网站管理工具。但是,许多 Web 应用程序都包含自己的用于创建角色和用户的模块。为简单起见,本教程将使用 ASP.NET 网站管理工具。

  16. 在 ASP.NET 网站管理工具中,单击 安全选项卡。现在成员资格和角色提供者都已启用,您将看到用于创建角色和用户的链接。单击创建或管理角色链接。

  17. 您现在可以输入新角色的名称并单击 添加角色以创建新角色。根据需要创建新角色。

  18. 单击返回按钮。

  19. 单击创建用户链接。您现在可以填写有关要创建的用户的信息,并将该用户分配给一个或多个角色。

  20. 使用mysql命令解释器,您可以检查您的数据库是否已正确填充了成员资格和角色数据。

    mysql> SELECT * FROM my_aspnet_users;
    mysql>  SELECT * FROM my_aspnet_roles;

在本教程中,您了解了如何设置连接器/NET 成员资格和角色提供程序以在 ASP.NET Web 应用程序中使用。