Asp.net 在控制器外部使用PasswordHasher访问UserManager

Asp.net 在控制器外部使用PasswordHasher访问UserManager,asp.net,asp.net-identity,.net-core-2.0,Asp.net,Asp.net Identity,.net Core 2.0,我有一个web应用程序,它使用asp.net core 2.0,具有身份和实体框架核心。我试图在DB创建之后创建几个用户。我创建了DbInitializer类,它是从Program.Main()调用的 publicstaticvoidmain(字符串[]args) { var host=BuildWebHost(args); 使用(var scope=host.Services.CreateScope()) { var services=scope.ServiceProvider; 尝试 { v

我有一个web应用程序,它使用asp.net core 2.0,具有身份和实体框架核心。我试图在DB创建之后创建几个用户。我创建了DbInitializer类,它是从Program.Main()调用的

publicstaticvoidmain(字符串[]args)
{
var host=BuildWebHost(args);
使用(var scope=host.Services.CreateScope())
{
var services=scope.ServiceProvider;
尝试
{
var context=services.GetRequiredService,我创建了新的UserManager,如下所示

 var store = new UserStore<ApplicationUser>(context);
 var hasher = new PasswordHasher<ApplicationUser>();
 var manager = new UserManager<ApplicationUser>(store, null, hasher, null, null, null, null, null, null);
 await manager.CreateAsync(user, "password");
var-store=newuserstore(上下文);
var hasher=new PasswordHasher();
var manager=newusermanager(store,null,hasher,null,null,null,null,null,null);
wait manager.CreateAsync(用户,“密码”);

然后我创建了用户。用户被创建了,我可以在数据库中看到他,问题是我不能用给定的密码登录。我想问题是我创建了新的密码哈希器。我如何访问应用程序中使用的UserManager?。

我在尝试将用户植入我的数据库时遇到了类似的问题,我就是这样解决的

尝试将服务而不是上下文传递给Initialize方法:

DbInitializer.Initialize(services);
public static void Initialize(IServiceProvider services) {

    var context = services.GetRequiredService<ApplicationDbContext>();
    //Do stuff with context        

    //Obtain reference to UserManager
    var userManager = services.GetRequiredService<UserManager<ApplicationUser>>();

    // Set properties for new User
    ApplicationUser user = new ApplicationUser
    {
        UserName = "admin@myapp.local",
        Email = "admin@myapp.local"
    };

    //Set password
    string password = "Change.Me99";

    //Create new user
    var result = userManager.CreateAsync(user, password);

    //Check the result
}
然后更新初始化方法:

DbInitializer.Initialize(services);
public static void Initialize(IServiceProvider services) {

    var context = services.GetRequiredService<ApplicationDbContext>();
    //Do stuff with context        

    //Obtain reference to UserManager
    var userManager = services.GetRequiredService<UserManager<ApplicationUser>>();

    // Set properties for new User
    ApplicationUser user = new ApplicationUser
    {
        UserName = "admin@myapp.local",
        Email = "admin@myapp.local"
    };

    //Set password
    string password = "Change.Me99";

    //Create new user
    var result = userManager.CreateAsync(user, password);

    //Check the result
}
公共静态无效初始化(IServiceProvider服务){
var context=services.GetRequiredService();
//根据上下文做事情
//获取对UserManager的引用
var userManager=services.GetRequiredService();
//为新用户设置属性
ApplicationUser用户=新的ApplicationUser
{
用户名=”admin@myapp.local",
电子邮件=”admin@myapp.local"
};
//设置密码
字符串password=“Change.Me99”;
//创建新用户
var result=userManager.CreateAsync(用户,密码);
//检查结果
}