• 初识AspNet Core中的标识Identity


    AspNet Core中的标识Identity,是用于Web应用程序的成员身份验证系统。

    最方便的引入办法是在创建MVC或Pages的Web应用时,直接选择相应的身份验证系统。
    如图:

    如果选择的是“个人用户帐户”,则系统将包含7个实体类型,分别为User(用户)、Role(角色)、UserClaim(用户权限声明)、UserToken(用户身份验证令牌)、RoleClaim(角色内所有用户授予权限声明)、UserLogin(用户与登录名关联)、UserRole(用户与角色关联)。如何缺省的话,会对应创建如下7张数据表:

    如果希望用户身份验证系统与自己使用的数据表结合在同一数据库,则只需要你的数据上下文定义类继承自IdentityDbContext(包含角色)即可。如

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
             : base(options)
       {
       }
    
        protected override void OnModelCreating(ModelBuilder builder)
        {
        }
    
        public DbSet<Product> Products { get; set; }
        ...
    }
    

    其中ApplicationUser是继承自IdentityUser的自定义用户类,该类可以添加一些自己的用户属性。如ClientIP、CreateDate等。如果不需要引入这些额外属性,可以直接使用IdentityUser作为基类泛型。

    OnModelCreating方法可以自定义数据表字段属性。如字长、表名等。
    这样,最后生成的数据库就可以直接包含你自己的表和身份验证所需的7张表了,用起来比较方便。

    对于MVC Web应用,使用身份验证系统是挺简单的。通过在Startup.cs文件进入依赖项注入:
    (1)在ConfigureSerivces方法中添加:

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseMySql(
            Configuration.GetConnectionString("MysqlConnection")));
    

    实现数据库的访问。

    (2)在同一方法中添加

    services.AddDefaultIdentity<ApplicationUser>()
        .AddRoles<IdentityRole>()
        .AddRoleManager<RoleManager<IdentityRole>>()
        .AddDefaultUI(UIFramework.Bootstrap4)
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();
    

    注入用户验证服务。

    (3)在Configure方法中添加

    app.UseAuthentication();
    

    添加授权服务。

    (4)在控制器中引入如下命名空间(如果缺少对应的包,就通过NuGet安装):

    using Microsoft.AspNetCore.Identity;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.EntityFrameworkCore;
    using Microsoft.AspNetCore.Authorization;

    (5)使用相应的管理服务

    public class ProductController : Controller
    {
        private readonly UserManager<ApplicationUser>     _userManager;    // 用户管理
        private readonly RoleManager<IdentityRole> _roleManager;    // 角色管理
        private readonly SignInManager<ApplicationUser> _signInManager;    // 登录管理
    
        public ProductController(UserManager<Application>     userManager, RoleManager<IdentityRole>, 
            SignInManager<Applicationuser> signInManager)
        {
            _userManager = userManager;
            _roleManager = roleManager;
            _signInManager = signInManager;
        }
    
    ...
    } 

    此后,就可以使用上述字段变量调用相应的功能进行用户管理了。

  • 相关阅读:
    OpenCV -- VideoWriter
    Opencv -- 显示创建Mat对象的七种方式
    OpenCV -- Video Capture
    OpenCV -- Mat类详解
    OpenCV -- .at<uchar>(j, i) 和.at<uchar>(Point(j, i)) 的区别
    OpenCV -- 图像遍历的四种方式(at、指针、isCountinuous、迭代器)、在Vector尾部加数据函数push_back()
    css实现上传按钮
    理解原型对象
    margin 0 auto 元素元素并未居中的原因!
    css中的布局
  • 原文地址:https://www.cnblogs.com/moonblogcore/p/10918709.html
Copyright © 2020-2023  润新知