在使用ASP.NET Identity的ASP.NET Core 1.1应用程序中,我创建了一个用户:
PasswordHasher<User> hasher = new PasswordHasher<User>();
User user = new User {
Email = "john@company.com",
Username = "john@company.com
};
user.PasswordHash = hasher.HashPassword(user, "johnpass");
context.Users.Add(user);
context.SaveChanges();
创建了用户但是当我尝试使用以下内容进行签名时,它失败了:
SignInResult result = await _signInManager.PasswordSignInAsync("john@company.com", "johnpass", false, true);
然后我尝试使用UserManager创建用户:
PasswordHasher<User> hasher = new PasswordHasher<User>();
User user = new User {
Email = "john@company.com",
Username = "john@company.com
};
await userManager.CreateAsync(user, "johnpass");
现在我可以登录了。看来问题出在HashPassword方法上。
有没有人知道如何在没有UserManager的情况下创建用户?
更新
我尝试创建一个UserManager而不依赖于注入,因为我在控制台应用程序而不是Web应用程序上创建我的测试数据:
var userStore = new UserStore(Context);
var userManager = new UserManager<User>(userStore, null, null, null, null, null, null, null, null);
用户已创建,但我仍无法登录。
答案 0 :(得分:2)
你必须做以下事情:
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);
答案 1 :(得分:0)
在登录时遵循以下方案。
使用userName或Email获取用户
user = context.Users.FirstOrDefault(usr => usr.UserName == userName);
- 醇>
使用以下方法检查此用户是否拥有此密码:
userManager.CheckPasswordAsync(user, password);
其中userManager是来自UserManager<User>