【发布时间】:2017-08-09 07:02:03
【问题描述】:
在一个带有 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 而不使用 Injection,因为我是在控制台应用程序而不是 Web 应用程序上创建测试数据:
var userStore = new UserStore(Context);
var userManager = new UserManager<User>(userStore, null, null, null, null, null, null, null, null);
用户已创建,但我仍然无法登录。
【问题讨论】:
-
不仅仅是密码哈希,还有安全标记。
-
安全印章?你能举个例子怎么解决吗?
-
你已经知道答案了:使用
UserManager -
这就是重点......我试图不使用它,因为我使用控制台应用程序在 Web 应用程序上下文之外注入测试数据。似乎 UserManager 期望在其中注入一堆类,而在我的控制台应用程序上我没有。
-
用户管理器类并不需要那么多注入。它需要一个
UserStore,它本身需要一个DbContext。应该不难弄清楚。
标签: c# asp.net-core asp.net-identity asp.net-identity-3