自定义ASP.NET Identity(三)- 实现自定义MySQL ASP.NET Identity存储提供程序
- 怎样在Azure上创建MySQL数据库实例。
- 怎样在Azure使用MySQL客户端工具 (MySQL Workbench)创建表并管理数据库。
- 怎样在MVC工程中替换默认ASP.NET Identity存储实现为自定义实现。
下载完整工程
完成这个指南后,你将有一个使用驻留在Azure上的MySQL数据库的ASP.NET Identity的MVC应用工程。
你可以从AspNet.Identity.MySQL (CodePlex)下载完整的MySQL 存储提供程序代码。
步骤
在这个指南中你将完成:
1、在Azure上创建MySQL数据库
2、在MySQL中创建ASP.NET Identity表结构
3、创建一个MVC应用并且配置它使用MySQL提供程序
4、运行应用
本文不包含简介ASP.NET Identity的结构和如何实现自定义存储提供程序的说明。这些信息请参看自定义ASP.NET Identity(一)- 自定义ASP.NET Identity存储提供程序。
回顾MySQL存储提供程序类
回到之前创建MySQL存储提供程序的步骤,让我们看看构成存储提供程序的这些类。你需要这些类来管理数据库操作并且应用程序调用它们来管理用户和角色。
存储类
- IdentityUser - 包含用户属性。
- UserStore - 包含添加,更新或者检索用户的操作。
- IdentityRole - 包含角色属性。
- RoleStore - 包含添加,删除,更新和检索角色的操作。
数据访问层类
在这个例子中,数据访问成类包含操作数据表的SQL语句;然而,在你的代码中你可能想要使用对象-关系映射(ORM)框架,如Entity Framework或者NHibernate。特别是,你的应用程序在没有ORM包含的延迟加载和对象缓存的情况下可能会遇到性能问题。更多信息请参看 ASP.Net Identity 2.0 without Entity Framework?
- MySQLDatabase - 包含执行MySQL数据库操作的连接和方法。UserStore和RoleStore都实例化这个类的一个实例。
- RoleTable - 包含存储角色的数据表操作。
- UserClaimsTable - 包含存储用户Claims的数据表操作。
- UserLoginsTable - 包含存储用户登录信息的数据表操作。
- UserRoleTable - 包含存储用户分配角色的数据表操作。
- UserTable - 包含存储用户的数据表操作。
在Azure上创建MySQL数据库实例
1、登录到Azure Portal.
2、点击 页面上的 +NEW 按钮,并且选择STORE。
3、在 Choose and Add-on 向导中, 选择 ClearDB MySQL Database 并且点击对话框按钮的右侧的下一步
4、默认是Free计划,修改Name为IdentityMySQLDatabase。选择区域后点击下一步。
5、点击复选框后完成。
6、数据库创建完成之后, 你可以从管理门户的ADD-ONS标签对数据库进行管理。
7、点击在这个页面的底部的CONNECTION INFO可以查看链接信息。
8、点击复制按钮复制链接字符串并且将其应用到你的MVC应用中。
在MySQL数据库中创建ASP.NET Identity表
Install MySQL Workbench tool to connect and manage MySQL database
- 安装MySQL Workbench工具。该工具可以从MySQL下载页面下载。
- 运行应用并且点击MySQLConnections + 添加一个新的链接。使用从Azure创建MySQL数据库连接串,可以很容易的创建这个指南。
- 建立连接之后,打开一个新的Query 标签;粘贴 MySQLIdentity.sql 文件中的命令到查询窗口,并且执行,完成创建数据库表。
- 现在 ASP.NET Identity 需要的所有的MySQL表已经在Azure上创建完成。如下显示。
从模板创建MVC应用并且配置其使用MySQL提供程序
如果需要, 安装 Visual Studio Express 2013 for Web 或者 Visual Studio 2013 Update 2。
从CodePlex下载ASP.NET.Identity.MySQL工程
- 浏览资源库的URL AspNet.Identity.MySQL (CodePlex).
- 下在源代码。
- 解压.zip文件到本地文件夹。
- 打开AspNet.Identity.MySQL解决方案并且生成它。
从模板创建一个新的MVC应用
- 右键点击AspNet.Identity.MySQL 解决方案并且 Add, New Project
- 在Add New Project 对话框选择Visual C#->Web 然后选择ASP.NET Web Application。输入工程名称IdentityMySQLDemo;然后点击OK按钮。
-
在New ASP.NET Project 对话框,选择MVC模板,保持默认选项不变 (包含:Individual User Accounts 作为身份验证方法) 然后点击 OK。
-
在解决方案管理器中,右键点击IdentityMySQLDemo工程,选择 Manage NuGet Packages。在查找文本框中输入Identity.EntityFramework。在结果列表中选择这个包,点击 Uninstall。你会被提示卸载依赖包EntityFramework。点击是,我们在这个应用中将不再使用这个包。
- 右键点击IdentityMySQLDemo工程,选择 Add, Reference, Solution, Projects; 选择AspNet.Identity.MySQL 工程并且点击 OK。
- 在IdentityMySQLDemo 工程中, 替换所有引用到
using Microsoft.AspNet.Identity.EntityFramework;
为using AspNet.Identity.MySQL;
- 在IdentityModels.cs, 设ApplicationDbContext 到MySqlDatabase 并且包括一个接受一个连接名称参数的构造函数。
public class ApplicationDbContext : MySQLDatabase { public ApplicationDbContext(string connectionName) : base(connectionName) { } public static ApplicationDbContext Create() { return new ApplicationDbContext("DefaultConnection"); } }
- 打开IdentityConfig.cs 文件。在 ApplicationUserManager.Create 方法,使用下面的代码替换 UserManager :
var manager = new ApplicationUserManager( new UserStore<ApplicationUser>( context.Get<ApplicationDbContext>() as MySQLDatabase));
- 打开web.config文件并且使用之前创建的MySQL数据库的信息替换DefaultConnection字符串中下面高亮部分的内容:
<add name="DefaultConnection" connectionString="Database=IdentityMySQLDatabase; Data Source=<DataSource>;User Id=<UserID>;Password=<Password>" providerName="MySql.Data.MySqlClient" />
隐形应用并且连接到MySQL DB
- 邮件点击IdentityMySQLDemo工程并且Set as Startup Project 。
- 点击Ctrl + F5创建并运行应用。
- 点击页面顶部的 Register 标签。
- 输入用户名和密码后,点击Register。
- 一个新用户被注册,并且已经登录。
- 回到MySQL Workbench 工具,检查IdentityMySQLDatabase 表的内容。表中已经存在你注册的新用户。
下一步
在应用中怎样启用其它的身份验证方法, 请参考 Create an ASP.NET MVC 5 App with Facebook and Google OAuth2 and OpenID Sign-on.
学习如何在你的数据库中使用OAuth和设置限制用户访问你的应用中的角色,请参看 Deploy a Secure ASP.NET MVC 5 app with Membership, OAuth, and SQL Database to Azure.