1.net core identity涉及到很多知识,很多概念包括Claims,Principal等等概念需要我们一步步学习才能掌握其原理,有两篇博客是比较好的介绍该框架的,

https://segmentfault.com/a/1190000014966349

http://www.cnblogs.com/savorboard/p/aspnetcore-identity.html

2.我在这里先不涉及到上面2篇博客提到的较为高深的内容,而是按照Adam Freeman的.net core mvc中相关代码来做一个小例子

3.首先我们需要明确一个概念是AspNetCore.Identity这一框架是为我们身份认证和权限管理统一做出的抽象,使我们可以通过实现相关接口或方法来完成身份认证的模块,

而不用自己去实现相关繁复的功能.那么下面就进入正题

4.Microsoft.AspNetCore.Identity 命名空间下IdentityUser 为我们定义了用户身份的基类,这里展示一部分属性

 public class IdentityUser<TKey> where TKey : IEquatable<TKey>{

     public IdentityUser();

     public IdentityUser(string userName);

     public virtual DateTimeOffset? LockoutEnd { get; set; }

     public virtual int AccessFailedCount { get; set; }

     public virtual string UserName { get; set; }

     public virtual string Email { get; set; }

 }

5.我们可以通过实现IdentityUser来使用

     public class AppUser: IdentityUser
     {
          //加入其它属性
     }

6.实现IdentityDbContext配置上下文能用到ef的相关功能

  public class AppIdentityDbContext: IdentityDbContext<AppUser>
     {

         //public DbSet<AppUser> appuser
         public AppIdentityDbContext(DbContextOptions<AppIdentityDbContext> options)
                         : base(options) { }
     }

7.Startup启动类配置,

AddIdentity方法指定用户和用户的角色类,我们用我们定义的AppUser 和系统定义的IdentityRoleAddEntityFrameworkStores 用于配置应用Ef哪个上下文来对用户信息做存储AddDefaultTokenProviders用于配置令牌的实现,是cookie还是jwt等等,这一块不熟,最后利用app.UseAuthentication()将identity加入管道中.

下面的一下配置用来配置用户名,邮箱,密码的一些规则,可以不写

  services.AddDbContext<AppIdentityDbContext>(options =>
                                     options.UseSqlServer(Configuration["Data:SportStoreIdentity:ConnectionString"]));

   services.AddIdentity<AppUser, IdentityRole>(option=> {
                 //邮箱必须唯一
                 option.User.RequireUniqueEmail = true;
                 //用户名只许小写字母拼写
                 option.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyz";
                 option.Password.RequiredLength = ;
                 option.Password.RequireNonAlphanumeric = false;
                 option.Password.RequireLowercase = false;
                 option.Password.RequireUppercase = false;
                 option.Password.RequireDigit = false;

             })
               .AddEntityFrameworkStores<AppIdentityDbContext>()
                     .AddDefaultTokenProviders();

        public void Configure(IApplicationBuilder app) {                    app.UseStatusCodePages();                    app.UseDeveloperExceptionPage();                                  app.UseStaticFiles();                                 app.UseAuthentication();                                 app.UseMvcWithDefaultRoute();} 

8.createModel 和Controller,可以看出UserManager是对用户信息做出管理的一个类,你们可以进入看看有什么方法,最后调用就不用我说了吧

 public class CreateModel {
 [Required]
 public string Name { get; set; }
 [Required]
 public string Email { get; set; }
 [Required]
 public string Password { get; set; }
 }
 public class AdminController : Controller
     {

        private UserManager<AppUser> userManager;
        public AdminController(UserManager<AppUser> usrMgr
         {
             userManager = usrMgr;
         }
       

public IActionResult Index(){
                     return View(userManager.Users);
          }

       public ViewResult Create() => View();      

       [HttpPost]
         public async Task<IActionResult> Create(CreateModel model)
         {
             if (ModelState.IsValid)
             {
                 AppUser user = new AppUser
                 {
                     UserName = model.Name,
                     Email = model.Email
                 };

                 IdentityResult result
                 = await userManager.CreateAsync(user, model.Password);
                 if (result.Succeeded)
                 {
                     return RedirectToAction("Index");
                 }
                 else
                 {
                     foreach (IdentityError error in result.Errors)
                     {
                         ModelState.AddModelError("", error.Description);
                     }
                 }
             }
             return View(model);
         }

 }

9.果然是技术不够,写这么点就有点力不从心,真是羡慕那些长篇大论的大神,这就是我的理解,肯定有欠缺的地方,望大家指正

.net core identity(一)简单运用的更多相关文章

  1. ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 迁移数据 上一章节中我们配置了 ...

  2. ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 配置 上一章节我们简单介绍了下 Id ...

  3. ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 验证特性 上一章节我们简单介绍了 ...

  4. ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 框架 前面我们使用了 N 多个章节, ...

  5. ASP.NET Core Identity Hands On(1)——Identity 初次体验

    ASP.NET Core Identity是用于构建ASP.NET Core Web应用程序的成员资格系统,包括成员资格.登录和用户数据存储 这是来自于 ASP.NET Core Identity 仓 ...

  6. ASP.NET Core Identity Hands On(2)——注册、登录、Claim

    上一篇文章(ASP.NET Core Identity Hands On(1)--Identity 初次体验)中,我们初识了Identity,并且详细分析了AspNetUsers用户存储表,这篇我们将 ...

  7. Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验

    Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验 前几天分享的"[Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验][http://www ...

  8. IdentityServer4 中文文档 -14- (快速入门)使用 ASP.NET Core Identity

    IdentityServer4 中文文档 -14- (快速入门)使用 ASP.NET Core Identity 原文:http://docs.identityserver.io/en/release ...

  9. ASP.NET Core Identity 实战(2)——注册、登录、Claim

    上一篇文章(ASP.NET Core Identity Hands On(1)--Identity 初次体验)中,我们初识了Identity,并且详细分析了AspNetUsers用户存储表,这篇我们将 ...

随机推荐

  1. vue全家桶+Koa2开发笔记(1)--vuex

    1.  安装webpack的问题: webpack坑系列--安装webpack-cli 2.  vue-cli(vue脚手架)超详细教程 3.  在命令行中使用 touch 执行新建文件: 4.  关 ...

  2. day 54 JS 之 jquery

    jQuery入门 2017-07-10 jQuery快速入门. jQuery介绍 jQuery是一个轻量级的.兼容多浏览器的JavaScript库. jQuery使用户能够更方便地处理HTML Doc ...

  3. Spring事务管理机制的实现原理-动态代理

    之前在做项目中遇到spring无法进行事务代理问题,最后发现是因为没有写接口,原因当时明白了,看到这篇文章写的清楚些,转过来 我们先来分析一下Spring事务管理机制的实现原理.由于Spring内置A ...

  4. Linux 性能分析调优 (四)——案例篇:系统中出现大量不可中断进程和僵尸进程怎么办

    之前讲到 CPU 使用率的类型.除了上一节提到的用户 CPU 之外,它还包括系统 CPU(比如上下文切换).等待 I/O 的 CPU(比如等待磁盘的响应)以及中断 CPU(包括软中断和硬中断)等. 在 ...

  5. 漫谈 C++ 的 内存堆 实现原理

    如果我来设计 C++ 的 内存堆 , 我会这样设计 : 进程 首先会跟 操作系统 要 一块大内存区域 , 我称之为 Division , 简称 div . 然后 , 将这块 div 作为 堆 , 就可 ...

  6. gevent原理

    未看 http://blog.csdn.net/yueguanghaidao/article/details/24281751

  7. SqlServer :利用快捷键快速查看 字段说明查询及表结构 (小技巧)

    1.自定义4个常用的存储过程: sp_select :select * from sp_helpremark :查表的列,列的类型,备注(这里只查询有备注的列) sp_columns1 : 查表所有的 ...

  8. 12c R2 RAC Oracle Linux 7.3 ESXI6.5

    环境:ESXI6.5虚拟化 主机配置:操作系统 Oracle Linux 7.3 CPU:8个VCPU 内存:16G 本地磁盘:50G 全程默认最小化安装Oracle Linux 7.3操作系统 每个 ...

  9. jQuery 筛选器 链式编程操作

    $('#i1').next() 下一个标签$('#i1').nextAll() 兄弟标签中,所有下一个标签$('#i1').nextUntil('#ii1') 兄弟标签中,从下一个标签到id为ii1的 ...

  10. SystemParametersinfo 用法

    var   BmpPath: PChar; begin   BmpPath := 'C:\Temp\Test.bmp';   SystemParametersInfo(SPI_SETDESKWALLP ...