RoleExistsAsync 始终返回 false,尽管角色已在 .NET Core 8 Identity 中播种

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

我在使用 Identity 进行身份验证的 .NET Core 8 Web API 项目中遇到角色管理问题。我已在 OnModelCreating 方法期间成功将角色播种到数据库,如下所示:

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    // Seed User Roles
    SeedRoles(builder);
}

private void SeedRoles(ModelBuilder builder)
{
    builder.Entity<IdentityRole>().HasData(
        new IdentityRole { Name = SD.Role_Admin },
        new IdentityRole { Name = SD.Role_User },
        new IdentityRole { Name = SD.Role_HR });
}

但是,当我尝试在控制器中使用 wait _roleManager.RoleExistsAsync(role) 检查角色是否存在时,它总是返回 false,即使角色名称存在于数据库中也是如此。

我已经验证这些角色确实已播种到数据库中。这是控制器的相关代码片段:

var roleExists = await _roleManager.RoleExistsAsync(role);

任何有关 RoleExistsAsync 为何无法识别种子角色的见解将不胜感激。

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

我遇到了类似的问题,并通过在播种过程中初始化 IdentityRole 对象的 NormalizedName 字段来解决它。按如下方式更新您的代码:

private void SeedRoles(ModelBuilder builder)
{
    builder.Entity<IdentityRole>().HasData(
        new IdentityRole { Name = SD.Role_Admin, ConcurrencyStamp = "1",     NormalizedName = "ADMIN" },
        new IdentityRole { Name = SD.Role_User, ConcurrencyStamp = "2", NormalizedName = "USER" },
        new IdentityRole { Name = SD.Role_HR, ConcurrencyStamp = "3",     NormalizedName = "HR" });
}

这可确保 NormalizedName 字段设置正确,并且 RoleExistsAsync 现在应该能够识别种子角色。

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