首页 > 解决方案 > 如何从数据库 asp.net core 2 动态设置 IdentityOptions

问题描述

如何从数据库 asp.net core 2 动态设置 IdentityOptions?

我可以静态设置

services.Configure<IdentityOptions>(options =>
            {
                // Password settings.
                options.Password.RequireDigit = true; 
                options.Password.RequireLowercase = true;
                options.Password.RequireNonAlphanumeric = true;
                options.Password.RequireUppercase = true;
                options.Password.RequiredLength = 6;
                options.Password.RequiredUniqueChars = 1;

                // Lockout settings.
                options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);

                options.Lockout.MaxFailedAccessAttempts = 2;
                options.Lockout.AllowedForNewUsers = true;

                // User settings.
                options.User.AllowedUserNameCharacters =
                "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
                options.User.RequireUniqueEmail = true;
            });

但我想从数据库配置它。我有一些关于那个的专栏。

var staticSetting = _unitOfWork.StaticSettings.GetAll().FirstOrDefault();
staticSetting.RequireDigit
staticSetting.RequireLowercase
staticSetting.RequireNonAlphanumeric
staticSetting.RequireUppercase 
staticSetting.RequiredLength 
staticSetting.RequiredUniqueChars 
staticSetting.DefaultLockoutTimeSpanFromMinutes
staticSetting.MaxFailedAccessAttempts
staticSetting.AllowedForNewUsers 

我如何以及在哪里可以从数据库中设置它?

标签: asp.net-core

解决方案


对于此要求,您可以IUnitOfWork从服务集合中解决,例如

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {

    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, IOptions<IdentityOptions> identityOptions)
    {
        this.staticSetting = app.ApplicationServices.CreateScope().ServiceProvider
                        .GetRequiredService<ApplicationDbContext>().StaticSettings.FirstOrDefault();
        identityOptions.Value.Password.RequireDigit = staticSetting.RequireDigit;

    }
}

您无法配置IdentityOptionsby,services.Configure<IdentityOptions>因为这将在方法期间add-migration和之前运行Configure


推荐阅读