2016-02-22 63 views
2

這就是我做的。ASP.Net核心(MVC6)無法用種子用戶登錄

public class SeedData 
{ 
    public static void Initialize(IServiceProvider serviceProvider) 
    { 
     var context = serviceProvider.GetService<ApplicationDbContext>(); 
     var userManager = serviceProvider.GetService<UserManager<ApplicationUser>>(); 

     var user0 = new ApplicationUser { UserName = "bob", Email = "[email protected]" }; 
     var result = userManager.CreateAsync(user0, "Password1!").Result; 

    } 
} 

initialize方法是在最後運行Startup.cs的配置方法:

SeedData.Initialize(app.ApplicationServices); 

當我看到在數據庫中,用戶是有預期。當我嘗試登錄時,我收到了無效的登錄嘗試。當我嘗試使用相同的電子郵件地址註冊用戶時,它不會檢測到重複的條目並添加具有相同地址的新用戶。

UserManager在控制器的上下文中表現出不同的行爲。我將如何能夠正確創建種子用戶,以便我可以登錄他們?

Id AccessFailedCount ConcurrencyStamp Email EmailConfirmed LockoutEnabled LockoutEnd NormalizedEmail NormalizedUserName PasswordHash PhoneNumber PhoneNumberConfirmed SecurityStamp TwoFactorEnabled UserName 
e3ff23eb-5db9-4eb3-871e-e95232178e1c 0 241c36e0-b0a9-4c86-af98-6d38132947e9 [email protected] 0 1 NULL [email protected] BOB AQAAAAEAACcQAAAAECFF4uxt8kT3nZgU9nhfticduyI3OXAxCZg+XJT/0Id280Tgf6B9cCY+Il6beRTFWw== NULL 0 3e9a2185-d248-4589-aa30-ecbb145787ff 0 bob 
+0

我認爲唯一的關​​鍵是用戶名,而不是電子郵件......您是否嘗試讓用戶使用相同的用戶名? –

+0

唯一的關鍵是ApplicationUserId列。 UserManager執行重複檢查,數據庫允許。但我確實試圖讓用戶使用相同的用戶名,並且仍然註冊它,並且我在數據庫中看到重複的記錄。如果我再次嘗試(通過控制器操作),則不會創建第三條記錄,並且出現驗證錯誤(用戶名/電子郵件已存在) – DanielC

+0

在我的結尾,用戶名始終是完整的電子郵件地址。控制器可能使用完整的電子郵件,而您沒有(用戶名爲bob vs [email protected])? –

回答

0

我剛剛遇到過這個問題。

如以下代碼

 

    var userManager = serviceProvider.GetService>(); 
    ApplicationUser user0, user1; 
    if (context.Users.Any(u => u.UserName == "[email protected]")) 
     user0 = context.Users.First(u => u.UserName == "[email protected]"); 
    else 
    { 
     user0 = new ApplicationUser { UserName = "[email protected]", Email = "[email protected]" }; 
     var result = userManager.CreateAsync(user0, "Abc123").Result; 
    } 
    if (context.Users.Any(u => u.UserName == "[email protected]")) 
     user1 = context.Users.First(u => u.UserName == "[email protected]"); 
    else 
    { 
     user1 = new ApplicationUser { UserName = "[email protected]", Email = "[email protected]" }; 
     var result = userManager.CreateAsync(user1, "Abc123").Result; 
    } 

當我「[email protected]」登錄將由消息拒絕登錄「無效登錄嘗試。」。

但隨着「[email protected]」的登錄將成功。

因此,ASP.net似乎使用用戶名&密碼進行登錄驗證。

相關問題