Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改角色后刷新claimsPrincipal_C#_Asp.net Identity_.net Core_Asp.net Core Identity - Fatal编程技术网

C# 更改角色后刷新claimsPrincipal

C# 更改角色后刷新claimsPrincipal,c#,asp.net-identity,.net-core,asp.net-core-identity,C#,Asp.net Identity,.net Core,Asp.net Core Identity,我在dotnetcore身份中的角色转换方面遇到了一些问题 我有以下代码 private async Task SetRoleToX(ClaimsPrincipal claimsPrincipal, string X) { var currentUser = await UserManager.GetUserAsync(claimsPrincipal); var roles = await UserManager.GetRolesAsync(currentUser);

我在dotnetcore身份中的角色转换方面遇到了一些问题

我有以下代码

private async Task SetRoleToX(ClaimsPrincipal claimsPrincipal, string X)
{
    var currentUser = await UserManager.GetUserAsync(claimsPrincipal);
    var roles = await UserManager.GetRolesAsync(currentUser);

    await UserManager.RemoveFromRolesAsync(currentUser, roles);
    await UserManager.AddToRoleAsync(currentUser, X);
    await SignInManager.RefreshSignInAsync(currentUser);
}
我无法更新ClaimsPrincipal

我已尝试使用登录和注销

如果我手动登录和注销,则角色切换可以正常工作


我一直在网上搜索,很多人都说这应该行得通:(

令人恼火的是,我所要做的就是将令牌与请求一起发送回去

我不敢相信我没有想到希望这能帮助别人

根据要求使用一些代码进行更新

// In controller

public async Task SwapRole([FromBody]RoleSwapRequestDto dto)
{
    await _service.SwapRole(
        User,
        dto.RoleName
    );

    return await AddCookieToResponse();
}

private async Task AddCookieToResponse()
{
    // Make your token however your app does this (generic dotnet core stuff.)
    var response = await _tokenService.RegenToken(User);

    if (response.Data != null && response.Data.Authenticated && response.Data.TokenExpires.HasValue)
    {
        Response.Cookies.Append(AuthToken, response.Data.Token, new CookieOptions
        {
            HttpOnly = false,
            Expires = response.Data.TokenExpires.Value
        });
    }

    return response;
}

/// inside _service
public async Task SwapRole(ClaimsPrincipal claimsPrincipal, string X)
{
    var currentUser = await UserManager.GetUserAsync(claimsPrincipal);
    var roles = await UserManager.GetRolesAsync(currentUser);

    await UserManager.RemoveFromRolesAsync(currentUser, roles);
    await UserManager.AddToRoleAsync(currentUser, X);
    await SignInManager.RefreshSignInAsync(currentUser);
}

你能添加你必须更改的代码以使其正常工作吗。