Обновление заявок. Принцип после смены ролей.

У меня есть некоторые проблемы с изменением роли в личности 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 ответ

Решение

Скорее досадно, все, что мне нужно было сделать, это отправить токен обратно с запросом.

Я не могу поверить, что я не думал об этом, надеюсь, это кому-то поможет.

Обновите с некоторым кодом в соответствии с просьбой

// 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);
}
Другие вопросы по тегам