无法登录与在asp.net核心通过dbContext创建的用户mvc
问题描述:
我想用初始数据种子数据库,我使用下面的代码来创建用户。用户被创建,密码散列等,但当我尝试用我的密码登录时,它无法登录我的错误消息:Invalid login attempt
。我究竟做错了什么?我正在使用具有标识模板的asp.net核心mvc应用程序,而不是自定义登录名。无法登录与在asp.net核心通过dbContext创建的用户mvc
var mymail = "[email protected]";
var mypw = "Test1.";
var applicationUsers = new ApplicationUser[]
{
new ApplicationUser {
UserName = Constants.AnonUserName,
Email = "[email protected]"
},
new ApplicationUser {
UserName = mymail,
Email = mymail
}
};
var pwHasher = new PasswordHasher<ApplicationUser>();
applicationUsers.ToList().ForEach(u =>
{
u.PasswordHash = pwHasher.HashPassword(u, mypw);
context.ApplicationUsers.Add(u);
});
context.SaveChanges();
答
登录失败,因为在数据库NormalizedUserName
字段为空,并在登录时,下面的查询的情况下(这失败):
SELECT "u"."Id", "u"."AccessFailedCount", "u"."ConcurrencyStamp", "u"."Email", "u"."EmailConfirmed", "u"."LockoutEnabled", "u"."LockoutEnd", "u"."NormalizedEmail", "u"."NormalizedUserName", "u"."PasswordHash", "u"."PhoneNumber", "u"."PhoneNumberConfirmed", "u"."SecurityStamp", "u"."TwoFactorEnabled", "u"."UserName"
FROM "AspNetUsers" AS "u"
WHERE "u"."NormalizedUserName" = $1
LIMIT 1
DETAIL: parameters: $1 = '[email protected]'
我想解决的办法是注入ILookupNormalizer服务,并以其Normalize
正常化方法,但它已经太多工作。我正在注入UserManager服务,并使用其CreateAsync方法创建一个具有密码的用户,如上面的@Tseng在注释中所建议的。
什么是'nihatpw'?还有'它登录失败'是什么意思?在调试时你观察到了什么?例外?密码不匹配?别的东西? – Igor
我刚刚添加了他们的值。我收到无效的登录尝试。我认为,asp.net身份使用不同类型的哈希比我的(嗯,我检查了Microsoft.AspNetCore.Identity UserManager中的源代码,它是一样的) – Nihat
您是否尝试用断点调试和观察哈希密码值来查看是否他们是一样的 ? – Rafalon