我正在使用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
}
}
答案 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