2017-05-03 77 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在註釋中所建議的。

相關問題