(十一)React Ant Design Pro +

一、前言

通过持久化,框架为我们准备了两个上下文:

用户持久化可以自定义一套逻辑,但是,我们直接使用微软的,然后新建一个用户上下文:

二、持久化1、新的认证服务

新建一个MVC项目,目录结构和上一个一样大致相同。安装所需的包:

图片[1]-(十一)React Ant Design Pro +-唐朝资源网

2、新用户上下文

//IdentityUser实际肯定是需要拓展的,还有一些自定义等功能,Demo这儿就不费劲了,随后要挪到正式的环境,用到再细说
public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions options)
        : base(options)
    {
    }
    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
    }
}

3、.cs 配置持久化

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
    //读取数据库连接

图片[2]-(十一)React Ant Design Pro +-唐朝资源网

var connectionString = Configuration.GetSection("DB").Value; if (connectionString == "") { throw new Exception("数据库配置异常"); } /**********************************IdentityServer4持久化配置**********************************/ var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name; //添加用户数据上下文 ApplicationDbContext services.AddDbContext(options => options.UseNpgsql(connectionString)); services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); //添加配置数据上下文 ConfigurationDbContext、操作数据上下文 PersistedGrantDbContext、用户持久化 var builder = services.AddIdentityServer() .AddConfigurationStore(options => { options.ConfigureDbContext = builder => { builder.UseNpgsql(connectionString, sql => sql.MigrationsAssembly(migrationsAssembly)); }; }) .AddOperationalStore(options => {

图片[3]-(十一)React Ant Design Pro +-唐朝资源网

options.ConfigureDbContext = builder => { builder.UseNpgsql(connectionString, sql => sql.MigrationsAssembly(migrationsAssembly)); }; //token配置 options.EnableTokenCleanup = true; options.TokenCleanupInterval = 30; }) .AddAspNetIdentity() .AddDeveloperSigningCredential(); }

4、迁移到数据库

包管理器控制台,依次输入以下命令并回车:

图片[4]-(十一)React Ant Design Pro +-唐朝资源网

数据库表、ER关系图

图片[5]-(十一)React Ant Design Pro +-唐朝资源网

图片[6]-(十一)React Ant Design Pro +-唐朝资源网

5、初始化种子数据

新建一个.cs,初始化种子数据,在.cs中配置好后使用内存数据

public class SeedData
{
    public static void InitData(IApplicationBuilder serviceProvider)
    {
        using (var scope = serviceProvider.ApplicationServices.CreateScope())
        {
            //初始化种子数据:配置、资源、客户端等

图片[7]-(十一)React Ant Design Pro +-唐朝资源网

scope.ServiceProvider.GetRequiredService().Database.Migrate(); { var context = scope.ServiceProvider.GetRequiredService(); context.Database.Migrate(); InitSeedData(context); } //初始化种子数据:用户 { var context = scope.ServiceProvider.GetRequiredService(); context.Database.Migrate(); var userManager = scope.ServiceProvider.GetRequiredService<UserManager>(); foreach (var user in InMemoryConfig.GetTestUser()) { var find = userManager.FindByNameAsync(user.Username).Result; if (find == null) { IdentityUser u = new IdentityUser() { UserName = user.Username }; //密码格式严格(至少一个非字母字符、至少一位0-9数字) var ret = userManager.CreateAsync(u, "WinterSir123!").Result; if (ret.Succeeded) { userManager.AddClaimsAsync(u, user.Claims); } } } } }

图片[8]-(十一)React Ant Design Pro +-唐朝资源网

} private static void InitSeedData(ConfigurationDbContext context) { if (!context.Clients.Any()) { foreach (var client in InMemoryConfig.GetClients()) { context.Clients.Add(client.ToEntity()); } context.SaveChanges(); } if (!context.IdentityResources.Any()) { foreach (var resource in InMemoryConfig.IdentityResources) { context.IdentityResources.Add(resource.ToEntity()); } context.SaveChanges(); } if (!context.ApiResources.Any()) { foreach (var resource in InMemoryConfig.GetApiResources()) { context.ApiResources.Add(resource.ToEntity()); }

图片[9]-(十一)React Ant Design Pro +-唐朝资源网

context.SaveChanges(); } if (!context.ApiScopes.Any()) { foreach (var resource in InMemoryConfig.GetApiScopes()) { context.ApiScopes.Add(resource.ToEntity()); } context.SaveChanges(); } } }

调用代码放在这里,认证服务启动时初始化,之前的内存模式配置持久化到数据库中

图片[10]-(十一)React Ant Design Pro +-唐朝资源网

图片[11]-(十一)React Ant Design Pro +-唐朝资源网

6、修改登录和注销代码**

图片[12]-(十一)React Ant Design Pro +-唐朝资源网

实际上,我不明白为什么我需要更改登录部分。一般采用框架提供的方法。百度和谷歌不解。 @图片[13]-(十一)React Ant Design Pro +-唐朝资源网

图片[14]-(十一)React Ant Design Pro +-唐朝资源网

三、渲染

**您可以看到我们必须使用新密码!登录,匹配的是数据库中已经持久化的信息

图片[15]-(十一)React Ant Design Pro +-唐朝资源网

四、前人种树,后人乘凉

五、代码已上传

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片