2017-05-03 78 views
0

我想用初始数据种子数据库,我使用下面的代码来创建用户。用户被创建,密码散列等,但当我尝试用我的密码登录时,它无法登录我的错误消息: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(); 
+0

什么是'nihatpw'?还有'它登录失败'是什么意思?在调试时你观察到了什么?例外?密码不匹配?别的东西? – Igor

+0

我刚刚添加了他们的值。我收到无效的登录尝试。我认为,asp.net身份使用不同类型的哈希比我的(嗯,我检查了Microsoft.AspNetCore.Identity UserManager中的源代码,它是一样的) – Nihat

+0

您是否尝试用断点调试和观察哈希密码值来查看是否他们是一样的 ? – Rafalon

回答

0

登录失败,因为在数据库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在注释中所建议的。

相关问题