使用默认的超级用户种子ASP.NET Core 1.1数据库

时间:2017-08-31 15:59:06

标签: c# entity-framework-core asp.net-core-1.1 asp.net-core-identity

我正在使用Identity进行身份验证来启动新的ASP.NET Core MVC项目。 我想在asp数据库中添加一个默认的超级用户,因此它可以添加新用户,但我不知道该怎么做。

首先,我不知道将相同的数据库用于用户的身份验证/授权以及应用程序的其余部分,或者我应该使用不同的数据库是否是个好主意。

其次,我需要知道如何播种" asp数据库"使用默认的超级用户。

在StackOverflow的this解决方案之后,我知道如何访问数据库,但我也想能够获得一个" userManager"实例,使用管理器代替上下文将超级用户添加到数据库。

我在Startup类中有这个代码:

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseStaticFiles();
        app.UseIdentity();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

        Seed(app);
    }

    public void Seed(IApplicationBuilder app)
    {
        using (var context = app.ApplicationServices.GetRequiredService<ApplicationDbContext>())
        {
            //... perform other seed operations
        }
    }

1 个答案:

答案 0 :(得分:0)

好的,这是我如何实现它来添加管理员用户。我正在使用基于声明的授权。

创建一个Initializer类:

public interface IDbInitializer
{
    void Initialize();
}

(...)

 public class DbInitializer : IDbInitializer
{
    private readonly ApplicationDbContext _context;
    private readonly UserManager<ApplicationUser> _userManager;
    private readonly RoleManager<IdentityRole> _roleManager;

    public DbInitializer(
        ApplicationDbContext context,
        UserManager<ApplicationUser> userManager,
        RoleManager<IdentityRole> roleManager)
    {
        _context = context;
        _userManager = userManager;
        _roleManager = roleManager;
    }

    //This example just creates an Administrator role and one Admin users
    public async void Initialize()
    {
        //create database schema if none exists
        _context.Database.EnsureCreated();

        //Create the default Admin account
        string password = "password";
        ApplicationUser user = new ApplicationUser {
            UserName = "Admin",
            Email = "my@mail.com",
            EmailConfirmed = true               
        };            
        user.Claims.Add(new IdentityUserClaim<string> { ClaimType = ClaimTypes.Role, ClaimValue = "Admin" });
        var result = await _userManager.CreateAsync(user, password);            
    }
}

在startup.cs中,在ConfigureService方法中添加此服务:

services.AddScoped<IDbInitializer, DbInitializer>();

最后,改变配置方法,如下所示:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IDbInitializer dbInitializer)

并在其中添加对Initialize方法的调用:

  dbInitializer.Initialize();

DI将负责其余部分。

以下是我作为参考的完整代码。它使用角色基础授权: https://gist.github.com/mombrea/9a49716841254ab1d2dabd49144ec092