2017-03-17 209 views
0

上的ASP.NET 1.1的核心应用与ASP.NET身份创建用户我创建了一个用户:没有的UserManager在Asp.Net核心身份

PasswordHasher<User> hasher = new PasswordHasher<User>(); 

User user = new User { 
    Email = "[email protected]", 
    Username = "[email protected] 
}; 

user.PasswordHash = hasher.HashPassword(user, "johnpass"); 

context.Users.Add(user); 
context.SaveChanges(); 

创建用户,但是当我尝试使用签名以下它失败:

SignInResult result = await _signInManager.PasswordSignInAsync("[email protected]", "johnpass", false, true);  

然后我试着用的UserManager创建用户:

PasswordHasher<User> hasher = new PasswordHasher<User>(); 

User user = new User { 
    Email = "[email protected]", 
    Username = "[email protected] 
}; 

await userManager.CreateAsync(user, "johnpass"); 

现在我能登录。看起来问题是使用HashPassword方法。

有没有人知道如何在没有UserManager的情况下创建用户?

UPDATE
我尝试没有晕晕的注入,因为我创建一个控制台应用程序我的测试数据,而不是在Web应用程序创建的UserManager:

var userStore = new UserStore(Context); 

var userManager = new UserManager<User>(userStore, null, null, null, null, null, null, null, null); 

创建的用户,但我我仍然无法登录。

+0

这不仅仅是密码散列,还包括安全印章。 – DavidG

+0

安全印章?你能给我一个例子如何解决它? –

+1

那么你已经得到了答案:使用'UserManager' – DavidG

回答

0

请按照以下方案进行登录。

  1. 使用的用户名或电子邮件获得用户。
    user = context.Users.FirstOrDefault(usr => usr.UserName == userName);

  2. 检查该用户是否有这个密码或不使用: userManager.CheckPasswordAsync(user, password);

其中的UserManager是UserManager<User>

1

一个对象,你必须做以下事情:

userManager.UpdateSecurityStampAsync(domainUser); 
     domainUser.NormalizedUserName = domainUser.NormalizedEmail = domainUser.UserName = domainUser.Email; 
     await userManager.UpdateNormalizedUserNameAsync(domainUser); 
     await userManager.UpdateNormalizedEmailAsync(domainUser); 
     await userManager.UpdateAsync(domainUser); 

如果您在您的配置电子邮件中设置确认

var token = await userManager.GenerateEmailConfirmationTokenAsync(domainUser); 
await userManager.ConfirmEmailAsync(domainUser, token); 
相关问题