繁体   English   中英

在Asp.Net核心标识中创建没有UserManager的用户

[英]Create user without UserManager in Asp.Net Core Identity

在使用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的情况下创建用户?

UPDATE
我尝试创建一个UserManager而不依赖于注入,因为我在控制台应用程序而不是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. 使用userName或Email获取用户。
    user = context.Users.FirstOrDefault(usr => usr.UserName == userName);

  2. 使用以下命令检查此用户是否具有此密码: userManager.CheckPasswordAsync(user, password);

其中userManager是UserManager<User>的对象

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM