0

我開始使用Identity進行身份驗證的新ASP.NET Core MVC項目。 我想添加一個默認的超級用戶到asp數據庫,所以它可以添加新用戶,但我不知道該怎麼做。使用默認超級用戶種子ASP.NET Core 1.1數據庫

首先,我不知道這是否是使用相同的數據庫用戶認證/授權和應用程序的其餘部分是一個好主意,或者我應該使用不同的數據庫。

其次,我需要知道如何播種「ASP數據庫」使用默認的超級用戶。

在從StackOverflow的this解決方案,我知道如何訪問數據庫,但我想也abble得到「的UserManager」實例使用管理超級用戶添加到數據庫中發生的背景的。

我在啓動類的代碼:

// 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 
     } 
    } 

回答

0

好,這裏是如何我已經實現了它添加一個管理員用戶。我正在使用基於聲明的授權。

創建一個初始化器類:

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 = "[email protected]", 
      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) 

,並在其中添加了調用初始化方法:

dbInitializer.Initialize(); 

的DI將完成剩餘的工作。

以下是完整的代碼,我花了作爲參考。它使用角色基礎授權: https://gist.github.com/mombrea/9a49716841254ab1d2dabd49144ec092