更改角色后刷新claimsPrincipal

12

我在更改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。

我尝试过登录和登出。

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

我一直在搜索网络,很多人说这应该可以工作:(

1个回答

8
相当令人恼火的是,我只需要将令牌与请求一起发送即可。
我简直不敢相信我没有想到这个方法,希望这能帮助到某些人。 根据要求更新一些代码
// 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);
}

2
你能添加你所更改的代码以使其正常工作吗? - AL - Lil Hunk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接