我正在尝试用初始数据播种DB,我正在使用以下代码来创建用户。用户会创建,密码哈希等,但是当我尝试使用密码登录时,它不会与错误消息登录我:Invalid login attempt
。我究竟做错了什么?我正在使用标识模板的ASP.NET Core MVC应用程序,而不是自定义登录。
var mymail = "my@my.com";
var mypw = "Test1.";
var applicationUsers = new ApplicationUser[]
{
new ApplicationUser {
UserName = Constants.AnonUserName,
Email = "Anonymous@xyz.com"
},
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();
登录失败,因为db中的 NormalizedUserName
字段为null,在登录时,发出查询之后(失败(:
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 = 'MY@MY.COM'
我想解决方案是注入ilookupnormalizer服务并使用其Normalize
方法归一化,但已经做得太多了。我正在注入usermanager服务,并使用其CreateSync方法来创建用密码的用户,如@Tseng在评论中的建议。