之前我们看到了新生成的项目中跟identity有关的有四个文件,这些文件是基础功能,并未开启identity的全部功能。现在我们先启用角色功能。

1、在App_Start文件夹中的IdentityConfig.cs中添加角色控制器。

在namespace xxx内(即最后一个“}”前面)添加 角色控制类

代码如下:

 //配置此应用程序中使用的应用程序角色管理器。RoleManager 在 ASP.NET Identity 中定义,并由此应用程序使用。
public class ApplicationRoleManager : RoleManager<IdentityRole>
{
public ApplicationRoleManager(IRoleStore<IdentityRole, string> roleStore)
: base(roleStore)
{
} public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
{
return new ApplicationRoleManager(new RoleStore<IdentityRole>(context.Get<ApplicationDbContext>()));
}
}

2、修改startup文件,启用角色管理器(RoleManager)。

打开App_Start文件夹中的startup.auth.cs 在  public void ConfigureAuth(IAppBuilder app) 方法中(约为19行左右)加入  app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);

修改完成后的代码如下:

 // 配置数据库上下文、用户管理器和登录管理器,以便为每个请求使用单个实例
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create); //添加的角色管理器
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

这里最基本的角色功能启用就完成了。

可选操作1:

这个可选操作用于在创建网站的时候,像网站数据库中添加一个管理用户。如果直接发布给别人用的话 还是挺不错的,自己用的话可以省略掉。

一、在identityconfig.cs可以配置添加一个用户(用户名为:“admin@123.com”,密码为“Admin@123456”)并把该用户添加到角色("Admin")中。

代码如下:

 public class ApplicationDbInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext>
{
protected override void Seed(ApplicationDbContext context) {
InitializeIdentityForEF(context);
base.Seed(context);
} //创建用户名为admin@123.com,密码为“Admin@123456”并把该用户添加到角色组"Admin"中
public static void InitializeIdentityForEF(ApplicationDbContext db) {
var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roleManager = HttpContext.Current.GetOwinContext().Get<ApplicationRoleManager>();
const string name = "admin@123.com";//用户名
const string password = "Admin@123456";//密码
const string roleName = "Admin";//用户要添加到的角色组 //如果没有Admin用户组则创建该组
var role = roleManager.FindByName(roleName);
if (role == null) {
role = new IdentityRole(roleName);
var roleresult = roleManager.Create(role);
}
        
       //如果没有admin@123.com用户则创建该用户
var user = userManager.FindByName(name);
if (user == null) {
user = new ApplicationUser { UserName = name, Email = name };
var result = userManager.Create(user, password);
result = userManager.SetLockoutEnabled(user.Id, false);
} // 把用户admin@123.com添加到用户组Admin中
var rolesForUser = userManager.GetRoles(user.Id);
if (!rolesForUser.Contains(role.Name)) {
var result = userManager.AddToRole(user.Id, role.Name);
}
}
}

二、修改Models文件夹中IdentityModels.cs

在public class ApplicationDbContext : IdentityDbContext<ApplicationUser>类中添加初始化设置。

代码如下:

 static ApplicationDbContext()
{
// 在第一次启动网站时初始化数据库添加管理员用户凭据和admin 角色到数据库
Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
}

可选操作2:自定义用户名和密码验证规则

自定义用户名验证规则,例如QQ.com。

要完成这个功能我们可以添加自定义的用户验证策略,只要继承继承UserValidator<T> 然后 Override ValidateAsync 方法。

1、为了管理方便,先创建一个文件夹“zidingyi”,在文件夹中添加一个名称为“CustomUserValidator.cs”的类文件,写入代码如下:

    //自定义用户名email只支持QQ.com域名

     public class CustomUserValidator : UserValidator<ApplicationUser>
{ public CustomUserValidator(ApplicationUserManager mgr)
: base(mgr)
{
}
//重写ValidateAsync方法
public override async Task<IdentityResult> ValidateAsync(ApplicationUser user)
{
IdentityResult result = await base.ValidateAsync(user); if (!user.Email.ToLower().EndsWith("@QQ.com"))
{
var errors = result.Errors.ToList();
errors.Add("Email 地址只支持QQ.com域名");
result = new IdentityResult(errors);
}
return result;
}
}

2、将自定义的UserValidator 附加到User Manger 对象上,操作如下:

打开App_Start/Identityconfig.cs 找到public static ApplicationUserManager Create()方法,把manager.UserValidator = new UserValidator<ApplicationUser>(manager)中的UserValidator替换为manager.UserValidator = new zidingyi.CustomUserValidator(manager);

可选操作3:自定义密码验证规则

自定义密码验证规则,如禁止类似“12345”的密码。

同上,完成这个我们只要继承PasswordValidator 并且Override ValidateAsync方法即可。

1、在文件夹“zidingyi”,添加一个名称为“CustomPasswordValidator.cs”的类文件,写入代码如下:

 //自定义用户密码禁止类似12345  记得添加对应的using
public class CustomPasswordValidator : PasswordValidator
{
//重写ValidateAsync方法
public override async Task<IdentityResult> ValidateAsync(string pass)
{
IdentityResult result = await base.ValidateAsync(pass);
if (pass.Contains(""))
{
var errors = result.Errors.ToList();
errors.Add("密码不能为连续的数字");
result = new IdentityResult(errors);
}
return result;
}
}

2、将自定义的PasswordValidator 附加到UserManger 对象上,操作如下:

打开App_Start/Identityconfig.cs 找到public static ApplicationUserManager Create()方法,把manager.PasswordValidator = new PasswordValidator(54行)中的PasswordValidator替换为manager.PasswordValidator = new zidingyi.CustomPasswordValidator;

Asp.Net MVC Identity 2.2.1 使用技巧(二)的更多相关文章

  1. Asp.Net MVC Identity 2.2.1 使用技巧(一)

    开发环境:vs2015 UP3  or  vs2017RC  项目环境:asp.net 4.6.1   identity版本为:asp.net identity 2.2.1 1.创建项目. 没什么好说 ...

  2. Asp.Net MVC Identity 2.2.1 使用技巧(八)

    一.添加管理链接 在View/Shared/_layout.cshtml,在页面导航上(28行)添加如下代码: @*通过身份验证并确认用户属于Admin角色显示管理菜单*@ @if (Request. ...

  3. Asp.Net MVC Identity 2.2.1 使用技巧(七)

    创建角色管理相关视图 1.添加视图 打开RolesAdminController.cs   将鼠标移动到public ActionResult Index()上  右键>添加视图   系统会弹出 ...

  4. Asp.Net MVC Identity 2.2.1 使用技巧(六)

    使用用户管理器之角色管理 一.建立模型,这里我们其实在之前的技巧(五)已经建好了. 二.建立控制器RolesAdminController 1.在controllers文件夹上点右键>添加> ...

  5. Asp.Net MVC Identity 2.2.1 使用技巧(五)

    创建用户管理相关视图 1.添加视图 打开UsersAdminController.cs   将鼠标移动到public ActionResult Index()上  右键>添加视图   系统会弹出 ...

  6. Asp.Net MVC Identity 2.2.1 使用技巧(四)

    使用用户管理器之用户管理 一.建立模型 1.在Models文件夹上点右键 >添加>类     类的名称自定,我用AdminViewModels命名的. 2.更改模板自建的AdminView ...

  7. Asp.Net MVC Identity 2.2.1 使用技巧(三)

    使用用户管理器之用户注册 用户管理的基本功能模块中已经做好了,我们现在做一些调整. 1.修改用户名注册规则. 上一篇中可选操作已经详解了这里把基本的设置简介下. 打开App_Start/identit ...

  8. ASP.NET MVC Identity 兩個多個連接字符串問題解決一例

    按照ASP.NET MVC Identity建立了一個用戶權限管理模塊,由于還要加自己已有的數據庫,所以建立了一個實體模型,建立了之后,發現登錄不了: 一直顯示“Login in failed for ...

  9. Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)

    简单介绍 关于SignalR的简单实用 请参考 Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室) 在上一篇中,我们只是介绍了简单的消息推送,今天我们来修改一下,实现 ...

随机推荐

  1. memcached 学习笔记 5

     memcached installed on linux 使用的操作系统是centos6.5 (有桌面) 1 上传libebent和memcache到/usr/local/src [root@jt ...

  2. Linux文件夹打包发送到本地

    tar -cvf script.tar scriptsz script.tar 具体:  sz/rz命令:  一般来说,linux服务器大多是通过ssh来进行远程的登陆和管理的,如何在命令方式下上传和 ...

  3. Elasticsearch集群和索引常用命令

    https://www.cnblogs.com/pilihaotian/p/5846173.html REST API用途 ES提供了很多全面的API,大致可以分成如下几种: 1 检查集群.节点.索引 ...

  4. Redis(2):常用命令详解

    redis命令不区分大小写 通用命令:1. 获得符合规则的键名列表: keys pattern   其中pattern符合glob风格  ? (一个字符) * (任意个字符) [] (匹配其中的任意一 ...

  5. Angular2-路由重定向的办法

    使用Angular2开发,常会遇到路由重定向的应用场景. 路由重定向的配置办法是这样的: {path:'要定向的路径', redirectTo:'要定向到的目标路由'} 比如某组件有个路由插件,并且一 ...

  6. Google Voice号码使用说明及用途

    Google Voice号码使用说明及用途 号码 已不能网页注册获取,直接向TB购买,搜Google Voice就行了.很便宜的. 一. Google Voice介绍 Google Voice首先是一 ...

  7. JSP简单实现统计网页访问次数

    JSP简单实现统计网页访问次数 需求:统计网页的访问次数 核心思想:利用application对象,将访问次数的信息放入application对象中,每次访问就+1.这里利用了application对 ...

  8. PowerDesigner16使用方法

    网上下载一个破解版的PowerDesigner https://www.cnblogs.com/longshiyVip/p/4643871.html 1.新建一个Physical Data Model ...

  9. JS求一个数组元素的最小公倍数

    求几个数的最小公倍数就是先求出前两个数的最小公倍数,然后再把这个最小公倍数跟第三个数放在一起来求最小公倍数,如此类推... var dbList = []; //两个数的最小公倍数 function ...

  10. JSTL总结摘要

    一 概述 1.什么是JSTL? JSP Standard Taglib,一个定义了一系列标签的标签库,以取代在JSP页面中嵌套的java代码,经常与EL结合使用,使页面风格统一,维护方便. JSTL标 ...