.Net Core 标识框架搭建

大部分系统中都需要通过数据库保存用户、角色等信息,并且需要注册、登录、密码重置、角色管理等功能。ASP.Net Core提供了标识(identity)框架,它采用基于角色的访问控制策略,内置了对用户、角色等表的管理及相关接口,从而简化了系统的开发。标识框架还提供了对外部登录(QQ登录、微信登录等)的支持。

标识框架使用EF Core对数据库进行操作,标识框架支持几乎所有数据库。下面的示例使用SqlServer数据库。

下面从0搭建标识框架,为后面使用框架操作数据做准备工作。

目录

第一步:创建项目

第二步:创建实体类

第三步:创建继承自IdentityDbContext的类

第四步:注册服务

第五步:EF Core数据库迁移


扫描二维码关注公众号,回复: 15427517 查看本文章

第一步:创建项目

创建ASP.Net Core WebApi项目,并通过nuget安装程序包

microsoft.aspnetcore.identity.entityframeworkcore
microsoft.entityframeworkcore.sqlserver
microsoft.entityframeworkcore.tools

安装完成如下图所示: 

第二步:创建实体类

public class Role : IdentityRole<long>
    {
    }
 public class User : IdentityUser<long>
    {
        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreationTime { get; set; }
        /// <summary>
        /// 昵称
        /// </summary>
        public string? NiceName { get; set; }
    }

使用自增标识列类型的主键。创建时间和昵称字段可以要,也可以不要。

第三步:创建继承自IdentityDbContext的类

 public class IdDbContext : IdentityDbContext<User, Role, long>
    {
        public IdDbContext(DbContextOptions<IdDbContext> option) : base(option)
        {
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            //从当前程序集中加载 实现了IEntityTypeConfiguration接口的实体配置类
            modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
        }
    }

可以直接通过IdDbContext类来操作数据库,不过标识框架中提供了RoleManager、UserManager等来简化对数据库的操作,这些类封装了对IdentityDbContext的操作。

第四步:注册服务

向依赖注入容器中注册与标识框架相关服务,并对相关的选项进行配置。

在Program.cs中添加如下代码:

builder.Services.AddDbContext<IdDbContext>(opt =>
{
    //连接的数据库
    string connStr = "Server=.;Database=idtest1;Trusted_Connection=True;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True";
    opt.UseSqlServer(connStr);
});

builder.Services.AddDataProtection();
builder.Services.AddIdentityCore<User>(options =>
{
    options.Password.RequireDigit = false;
    options.Password.RequireLowercase = false;
    options.Password.RequireNonAlphanumeric = false;
    options.Password.RequireUppercase = false;
    options.Password.RequiredLength = 6;
    options.Tokens.PasswordResetTokenProvider = TokenOptions.DefaultEmailProvider;
    options.Tokens.EmailConfirmationTokenProvider = TokenOptions.DefaultEmailProvider;
});

IdentityBuilder idBuilder = new IdentityBuilder(typeof(User), typeof(Role), builder.Services);
idBuilder.AddEntityFrameworkStores<IdDbContext>()
    .AddDefaultTokenProviders()
    .AddRoleManager<RoleManager<Role>>()
    .AddUserManager<UserManager<User>>();

24-33行代码,添加标识框架的一些基础服务。因为是示例代码,所以在26-30行代码中简化了密码的一些规则。

数据库连接应该写到配置文件中,这里直接写在代码中,只是记录框架的使用,实际项目中应写在配置文件中。

第五步:EF Core数据库迁移

一些EF Core Tools命令(例如migration命令)需要在设计时创建一个派生的DbContext实例,所以创建下面这个类。

 public class DbContextDesignTimeFactory : IDesignTimeDbContextFactory<IdDbContext>
    {
        public IdDbContext CreateDbContext(string[] args)
        {
            DbContextOptionsBuilder<IdDbContext> builder = new DbContextOptionsBuilder<IdDbContext>();
            builder.UseSqlServer("Server=.;Database=idtest1;Trusted_Connection=True;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True");
            return new IdDbContext(builder.Options);
        }
    }

在程序包管理器控制台窗口,执行Add-Migration Init,用来初始化、然后执行更新脚本命令Update-database,用来生成数据库和表。

操作完成后,数据库会生成相关的表。

到此为止,框架的基础搭建就完成了,数据库表也生成好了,接下去就是编写代码对用户和角色进行操作。

猜你喜欢

转载自blog.csdn.net/liangmengbk/article/details/130546093