自定义ASP.NET Identity(三)- 实现自定义MySQL ASP.NET Identity存储提供程序

ASP.NET Identity是一个可扩展的系统,你可以创建属于你自己的存储提供程序并且将它集成到你的应用中,而不需要重构你的应用。本章将介绍如何创建一个ASP.NET Identity的MySQL存储提供程序。关于如何创建自定义存储提供程序的概述请查看自定义ASP.NET Identity(一)- 自定义ASP.NET Identity存储提供程序。要完成这个指南,你必须安装Visual Studio 2013 Update 2。 这个指南将包含如下内容:

  • 怎样在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存储提供程序的步骤,让我们看看构成存储提供程序的这些类。你需要这些类来管理数据库操作并且应用程序调用它们来管理用户和角色。

存储类
数据访问层类
在这个例子中,数据访问成类包含操作数据表的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
  1. 安装MySQL Workbench工具。该工具可以从MySQL下载页面下载。

  2. 运行应用并且点击MySQLConnections + 添加一个新的链接。使用从Azure创建MySQL数据库连接串,可以很容易的创建这个指南。
  3. 建立连接之后,打开一个新的Query 标签;粘贴 MySQLIdentity.sql 文件中的命令到查询窗口,并且执行,完成创建数据库表。
  4. 现在 ASP.NET Identity 需要的所有的MySQL表已经在Azure上创建完成。如下显示。

从模板创建MVC应用并且配置其使用MySQL提供程序

如果需要, 安装 Visual Studio Express 2013 for Web 或者 Visual Studio 2013 Update 2。

从CodePlex下载ASP.NET.Identity.MySQL工程

  1. 浏览资源库的URL  AspNet.Identity.MySQL (CodePlex).

  2. 下在源代码。 
  3. 解压.zip文件到本地文件夹。
  4. 打开AspNet.Identity.MySQL解决方案并且生成它。

从模板创建一个新的MVC应用

  1. 右键点击AspNet.Identity.MySQL 解决方案并且 Add, New Project

  2. Add New Project 对话框选择Visual C#->Web 然后选择ASP.NET Web Application。输入工程名称IdentityMySQLDemo;然后点击OK按钮。
  3. New ASP.NET Project 对话框,选择MVC模板,保持默认选项不变 (包含:Individual User Accounts 作为身份验证方法) 然后点击 OK

  4. 在解决方案管理器中,右键点击IdentityMySQLDemo工程,选择 Manage NuGet Packages。在查找文本框中输入Identity.EntityFramework。在结果列表中选择这个包,点击 Uninstall。你会被提示卸载依赖包EntityFramework。点击是,我们在这个应用中将不再使用这个包。
  5. 右键点击IdentityMySQLDemo工程,选择 Add, Reference, Solution, Projects; 选择AspNet.Identity.MySQL 工程并且点击 OK
  6. 在IdentityMySQLDemo 工程中, 替换所有引用到
    using Microsoft.AspNet.Identity.EntityFramework;

    using AspNet.Identity.MySQL;
  7. 在IdentityModels.cs, 设ApplicationDbContextMySqlDatabase 并且包括一个接受一个连接名称参数的构造函数。

    public class ApplicationDbContext : MySQLDatabase
    {
        public ApplicationDbContext(string connectionName)
            : base(connectionName)
        {
        }
    
        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext("DefaultConnection");
        }
    }
  8. 打开IdentityConfig.cs 文件。在 ApplicationUserManager.Create 方法,使用下面的代码替换 UserManager :

    var manager = new ApplicationUserManager(
        new UserStore<ApplicationUser>(
        context.Get<ApplicationDbContext>() as MySQLDatabase));
  9. 打开web.config文件并且使用之前创建的MySQL数据库的信息替换DefaultConnection字符串中下面高亮部分的内容:

    <add name="DefaultConnection" connectionString="Database=IdentityMySQLDatabase;
    Data Source=<DataSource>;User Id=<UserID>;Password=<Password>"
    providerName="MySql.Data.MySqlClient" />

隐形应用并且连接到MySQL DB

  1. 邮件点击IdentityMySQLDemo工程并且Set as Startup Project

  2. 点击Ctrl + F5创建并运行应用。 
  3. 点击页面顶部的 Register 标签。

  4. 输入用户名和密码后,点击Register。
  5. 一个新用户被注册,并且已经登录。
  6. 回到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.

时间: 2025-01-06 10:03:24

自定义ASP.NET Identity(三)- 实现自定义MySQL ASP.NET Identity存储提供程序的相关文章

自定义会话状态存储提供程序

自定义会话状态存储提供程序  此版本程序只是说明  自定义会话  可以放在不同的地方, 可以改造成 把会话分布式存储 等. 一.Web.config  <sessionState mode="Custom" customProvider="JinshuaiCustomSessionStateProvider">  <providers>       <add name="JinshuaiCustomSessionStatePr

asp.net运行时错误:没有为扩展名&quot;.cshtml&quot;注册的提供程序。

解决方法: 一. 在machine.config或web.config中的<compilation><buildProviders>节注册一个.请确保所注册的提供程序具有包含值“web“或”all“的BuildProviderAppliesToAttribute特性 在machine.config或web.config中修改原来的<compilation> <compilation debug="true" targetFramework=&q

asp.net mvc3 数据验证(三)—自定义数据注解

原文:asp.net mvc3 数据验证(三)-自定义数据注解         前两节讲的都是asp.net mvc3预先设定的数据注解,但是系统自由的数据注解肯定不适合所有的场合,所以有时候我们需要自定义数据注解. 自定义数据注解有两种,一种是直接写在模型对象中,这样做的好处是验证时只需要关心一种模型对象的验证逻辑,缺点也是显而易见的,那就是不能重用. 还有一种是封装在自定义的数据注解中,优点是可重用,缺点是需要应对不同类型的模型. 现在我们以封装在自定义数据注解中的方法为例看下如何在asp.

asp.net core系列 48 Identity 身份模型自定义

原文:asp.net core系列 48 Identity 身份模型自定义 一.概述 ASP.NET Core Identity提供了一个框架,用于管理和存储在 ASP.NET Core 应用中的用户帐户. Identity添加到项目时单个用户帐户选择作为身份验证机制. 默认情况下,Identity可以使用的 Entity Framework (EF) Core 数据模型. 本文介绍如何自定义的身份标识模型. 1.1 下面是已经存在的身份模型, 由以下实体类型组成: 实体类型 说明 关系 Use

Spring Security教程(三):自定义表结构

在上一篇博客中讲解了用Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也不一定能满足项目对用户信息和权限信息管理的要求.那么接下来就讲解如何自定义数据库实现对用户信息和权限信息的管理. 一.自定义表结构 这里还是用的mysql数据库,所以pom.xml文件都不用修改.这里只要新建三张表即可,user表.role表.user_role表.其中user用户表,role角色表为保存用户权限

ASP.NET Core 使用 JWT 自定义角色/策略授权需要实现的接口

目录 ① 存储角色/用户所能访问的 API ② 实现 IAuthorizationRequirement 接口 ③ 实现 TokenValidationParameters ④ 生成 Token ⑤ 实现服务注入和身份认证配置 ⑥ 实现登陆 ⑦ 添加 API 授权策略 ⑧ 实现自定义授权校验 ⑨ 一些有用的代码 ① 存储角色/用户所能访问的 API 例如 使用 List<ApiPermission>存储角色的授权 API 列表. 可有可无. 可以把授权访问的 API 存放到 Token 中,T

MVC4 自定义错误页面(三)

一.概述 MVC4框架自带了定义错误页,该页面位于Shared/Error,该页面能够显示系统未能捕获的异常,如何才能使用该页面: 二.使用步骤: 1.配置WebConfig文件,在System.Web节点下加上 <customErrors mode="On"  defaultRedirect="~/Shared/Error" /> 翻阅一些大神写的博客,在他们的博客中指出defaultRedirect是指向错误页面的URL,可是经过本人测试的时候,发现

coreseek 自定义词库(三)排序 setsortmode

对于mysql获取数据,可以根据不同的条件来进行排序,同样使用coreseek也有同样的排序功能. PHP的API中只有 SetSortMode(模式,条件) 方法,他也支持多个字段一次排序. 根据上一篇的数据: require('sphinxapi.php'); $sc = new SphinxClient(); $sc->SetSortMode(SPH_SORT_ATTR_DESC, 'group_id'); $sc->SetSortMode(SPH_SORT_ATTR_ASC, 'sco

ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)

ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需 要将相应的ValidationAttribute应用到Model的类型或者属性上即可.对于自定义验证,我们也只需要定义相应的Validation 就可以了,不过服务端验证比较简单,而客户端验证就要稍微复杂一些,本文提供一个简单的实例说明在ASP.NET MVC中实现自定义验证的基本步骤.[源代码从这里下载] 一.AgeRangeAttr