Asp.net core mvc 添加到用户的角色在IsInRole中不提供false

Asp.net core mvc 添加到用户的角色在IsInRole中不提供false,asp.net-core-mvc,Asp.net Core Mvc,我正在尝试使用[Authorize(Roles=“Administrator”)] 但我总是被拒绝访问 为了测试添加的角色是否正确,我在控制器中添加了以下代码: var test=User.IsInRole("Administrator"); var user = await userManager.GetUserAsync(User); var roles =await userManager.Ge

我正在尝试使用[Authorize(Roles=“Administrator”)] 但我总是被拒绝访问

为了测试添加的角色是否正确,我在控制器中添加了以下代码:

            var test=User.IsInRole("Administrator");  
            var user = await userManager.GetUserAsync(User);
            var roles =await userManager.GetRolesAsync(user);
            rolesOfUser = roles.ToList();

我把角色加错了吗

表示用户未登录或未完成所有身份验证过程。如果是这样,我该怎么做

播种数据:

public async Task SeedAsync()
{
    context.Database.EnsureCreated();

    if (await roleManager.RoleExistsAsync("Administrator") == false)
    {
        await roleManager.CreateAsync(new IdentityRole("Administrator"));
    }

    var user = await userManager.FindByEmailAsync("Jakob.Madsen@********.com");
    if (user == null)
    {
        user = new IdentityUser()
        {
            UserName = "Jakob.Madsen@*********.com",
            PhoneNumber = "*********",
            Email = "Jakob.Madsen@*********.com",
        };
        var result = await userManager.CreateAsync(user, "*********");
        if (result == IdentityResult.Success)
        {
            userManager.AddToRoleAsync(user, "Administrator").Wait();
        }
        else
        {
            throw new InvalidOperationException("Could not create Administrator");
        }
    }

    var resultRoles = await userManager.GetRolesAsync(user);
    if (resultRoles.Contains("Administrator") == false)
    {
        userManager.AddToRoleAsync(user, "Administrator").Wait();
    }
}
更新: 我按照建议这样做。
现在它开始工作。

IsInRole方法和
[Authorize(Roles=“Administrator”)]
属性检查此声明主体拥有的标识是否包含类型为
ClaimsEntity.RoleClaimType的声明(
http://schemas.microsoft.com/ws/2008/06/identity/claims/role
)其中,声明的值等于角色参数指定的值

总之,如果调用IsInRole,默认情况下会假设表示角色的声明具有上述类型,否则角色检查将不会成功。您可以通过列出索赔来确认:

var claims = User.Claims.ToList();
您还没有提供如何为角色设定种子,但可以找到许多代码示例:


另外,不要忘记注销并再次登录以查看所需的行为。

IsInRole
方法和
[Authorize(Roles=“Administrator”)]
属性检查此声明主体拥有的标识是否包含类型为
ClaimSideEntity.RoleClaimType的声明(
http://schemas.microsoft.com/ws/2008/06/identity/claims/role
),其中声明的值等于角色参数指定的值

因此,总而言之,如果调用IsInRole,默认情况下,假设您代表角色的声明具有上述类型–否则角色检查将不会成功。您可以通过列出声明来确认:

var claims = User.Claims.ToList();
您还没有提供如何为角色设定种子,但可以找到许多代码示例:

另外,不要忘记注销并再次登录以查看所需的行为