播种用户不允许用户登录 ASP.NET Core 8 Web API - 端点允许他们登录

问题描述 投票:0回答:1

当我在第一次迁移时将用户植入数据库时,我根本无法通过新的 ASP.NET Core 8 API Identity 端点登录。

但是,如果我使用新端点 /register Swagger API 创建相同的用户然后登录,则在确认用户的电子邮件等信息后即可工作。

但是,如果我只是在种子脚本中通过 SQL 将

[EmailConfirmed]
设置为 True,则它不起作用并且不允许我的用户进入。为了安全起见,我用“testdomain”替换了我的真实域。

private void SeedUsers(ModelBuilder modelBuilder)
{
    //Seeding a  'Administrator' role to AspNetRoles table
    modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole
        { Id = "2c5e174e-3b0e-446f-86af-483d56fd7210", 
          Name = "Administrator", 
          NormalizedName = "ADMINISTRATOR".ToUpper() });
    modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole
        { Id = "8cc980c3-8643-4166-8dcb-de924036ec6b", 
          Name = "Staff",
          NormalizedName = "Staff".ToUpper() });

    // a hasher to hash the password before seeding the user to the db
    var hasher = new PasswordHasher<IdentityUser>();

    // Seeding the Admin user to AspNetUsers table
    modelBuilder.Entity<IdentityUser>().HasData(
      new IdentityUser
      {
          Id = "8e445865-a24d-4543-a6c6-9443d048cdb9", // primary 
          UserName = "[email protected]",
          Email = "[email protected]",
          NormalizedEmail = "[email protected]",
          NormalizedUserName = "ADMIN",
          LockoutEnabled = false,
          EmailConfirmed = true,
          PasswordHash = hasher.HashPassword(null, "Test12345!@")
       }
    );

    modelBuilder.Entity<IdentityUserRole<string>>().HasData(
        new IdentityUserRole<string>
            {
                RoleId = "2c5e174e-3b0e-446f-86af-483d56fd7210",
                UserId = "8e445865-a24d-4543-a6c6-9443d048cdb9"
            });

    // Seeding the relation staff Member between our user and role to AspNetUserRoles table

    modelBuilder.Entity<IdentityUser>().HasData(
         new IdentityUser
             {
                 Id = "d18e858a-c38d-4083-99b6-c5697b81d7cd", // primary 
                 UserName = "Staff",
                 Email = "[email protected]",
                 NormalizedEmail = "[email protected]",
                 NormalizedUserName = "STAFF"
                 EmailConfirmed = true,
                 PasswordHash = hasher.HashPassword(null, "Test12345!@")
             });

      modelBuilder.Entity<IdentityUserRole<string>>().HasData(
      new IdentityUserRole<string>
      {
          RoleId = "8cc980c3-8643-4166-8dcb-de924036ec6b",
          UserId = "d18e858a-c38d-4083-99b6-c5697b81d7cd"
      }
  );
}

但是,如果我通过此处注册我的用户并单击物理上的“单击此处”以在电子邮件中激活,则它可以工作

有人可以告诉我我的播种过程中做错了什么吗?

c# asp.net-core-webapi asp.net-core-identity .net-8.0
1个回答
0
投票

因此修复的是某些登录凭据的大小写错误。但我也没有在这篇文章中填充类似的安全标记。

即使种子输入了一个值,但将其物理添加到种子代码中似乎可以解决问题

https://github.com/aspnet/AspNetCore/issues/10689

我在播种时将其设置为指南

© www.soinside.com 2019 - 2024. All rights reserved.