在核心标识中创建没有用户管理器 Asp.Net 用户



在具有 ASP.NET 身份的 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);     

然后,我尝试使用用户管理器创建用户:

PasswordHasher<User> hasher = new PasswordHasher<User>();
User user = new User {
  Email = "john@company.com",
  Username = "john@company.com
};
await userManager.CreateAsync(user, "johnpass");

现在我可以登录了。似乎问题出在哈希密码方法上。

有谁知道如何在没有用户管理器的情况下创建用户?

更新
我尝试在不卷入的情况下创建一个用户管理器,因为我是在控制台应用程序而不是 Web 应用程序上创建测试数据:

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

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

你必须做以下事情:

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. 使用用户名或电子邮件获取用户。
    user = context.Users.FirstOrDefault(usr => usr.UserName == userName);

  2. 检查此用户是否具有此密码或未使用: userManager.CheckPasswordAsync(user, password);

其中用户管理器是来自UserManager<User>

的对象

相关内容

  • 没有找到相关文章

最新更新