如何使用ASP.NET Identity 2创建第一个root用户?

时间:2016-03-12 14:14:59

标签: c# asp.net asp.net-mvc

我正在使用ASP.NET MVC 5和Identity 2开发一个开源项目,我想知道如何在我的应用程序中创建第一个(root)用户。

我在Google上搜索过,我找到的唯一解决方案是将整个过程集成到Seed()函数中:

// From http://stackoverflow.com/questions/27498921/creating-asp-net-identity-user-in-seed-method-of-db-initializer
protected override void Seed(EvContext context)
{
   //Add other entities using context methods
   ApplicationUserManager manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context));
   var user = new ApplicationUser { Email = "admin@myemail.com" ,UserName = "admin@myemail.com"};
   var result = await manager.CreateAsync(user, "Temp_123");//this line gives error. obviously await cannot be used in non- async method and I cannot make Seed async
}

但由于这是一个开源项目,我不希望密码显示在代码上,而是在部署时在某处实现。有人告诉我,我可以使用OWIN,但我找不到任何解决方案。你的解决方案是什么?谢谢!

2 个答案:

答案 0 :(得分:1)

1-如果您的用户下载源代码并且他们将在Visual Studio中编译/部署它:在WebConfig中放置这些默认值或种子并在您的类中读取它。查看example here

2-如果您的用户通常部署已编译的版本,我会提出以下建议:

  1. 保持原样并告知用户默认密码
  2. 禁用自动种子功能并创建部署网页/控制器。当用户第一次想要启动时,他们需要转到安装程序页面并在那时建立第一个用户。
  3. 禁用自动种子功能。在isDeployed等数据库中创建设置表/存档。在AppStart中检查isDeployed,如果为false,则将所有请求重定向到安装程序页面,并在那时成为第一个用户。

答案 1 :(得分:0)

在我看来,为第一个用户提供已知的登录名和密码并不是一个糟糕的解决方案。部署过程应该有更改初始密码的步骤。