aspnetcore.identity - 在角色中,但被拒绝访问

Eri*_*ric 4 security asp.net-identity asp.net-core asp.net-core-2.0

Core 2.0,使用AspnetCore.Identity.我创建了一些角色,包括"Admin".

    //initializing custom roles 
    var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
    var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
    string[] roleNames = { "Admin", "Training", "Operations", "Membership", "Individual" };
    IdentityResult roleResult;

    foreach (var roleName in roleNames)
    {
        var roleExist = await RoleManager.RoleExistsAsync(roleName);
        // ensure that the role does not exist
        if (!roleExist)
        {
            //create the roles and seed them to the database: 
            roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName)); 
        }
    }
Run Code Online (Sandbox Code Playgroud)

我检查了SQL表,它们都在那里:

在此输入图像描述

然后我将自己添加到Admin角色(不是完整方法,而是相关部分):

    var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
    var _eric = await UserManager.FindByEmailAsync("username@gmail.com");
        await UserManager.AddToRoleAsync(_eric, "Admin");
Run Code Online (Sandbox Code Playgroud)

我检查了桌子,我在那里(和另一个我加入另一个角色的人):

在此输入图像描述

然后我转到我的方法并使用两个角色授权它,其中一个我在(管理员):

[Authorize(Roles ="Training, Admin")]
public ActionResult Index()
{



    return View();
}
Run Code Online (Sandbox Code Playgroud)

然后我被拒绝访问.我错过了什么,但无法弄清楚我搞砸了哪一步.用户在那里,我已登录,数据表显示我已分配角色,并且Authorize标记看起来很好.

Chr*_*att 7

角色是声明,声明仅在登录时加载.如果您修改声明(例如通过添加角色),则必须签署用户并自动重新签名或提示用户重新进行身份验证,重新加载索赔.

  • 谢谢你,克里斯,让我免于打我的显示器。我注销/登录,它按预期工作。 (2认同)