ASP.NET Core -  Obtendo o usuário atual do Identity
 Hoje veremos como obter o usuário do Identity atual logado em uma aplicação ASP .NET Core.

 

Na ASP.NET Core (e no .NET Core em geral), muitas coisas são feitas de maneira um pouco diferente do que você pode estar acostumado se estiver vindo do mundo do .NET Framework.
 


 

Por exemplo, como fazer para obter o usuário atual logado do Identity ?


Na  ASP.NET MVC no .NET Framework, você faria isso acessando o HttpContext.Current.User e suas propriedades :

 


var username = HttpContext.Current.User.Identity.Name;  
   

 

No .NET Core isso é tratado por meio de injeção de dependência e você estiver usando ASP.NET Core, a propriedade User é uma instância de ClaimsPrincipal nas Views, Controllers ou e no Razor. Assim, para recuperar as informações, você precisa utilizar as Claims.

 

Para obter o usuário no .NET Core  primeiro temos que definir o serviço no arquivo Program incluindo a referência ao namespace Microsoft.AspNetCore.Http :

using Microsoft.AspNetCore.Http
e a seguir registrando o serviço :
builderServices.Add<HttpContextAccessor>();

A seguir no controlador basta injetar uma instância do serviço :

 

private readonly IHttpContextAccessor _httpContextAccessor;

public SeuControlador(IHttpContextAccessor httpContextAccessor)
{
   _httpContextAccessor = httpContextAccessor;
}

 

Podemos fazer a injeção em Controllers, Views, Componentes customizados, e, se necessário, em propriedades passadas para Threads em segundo plano.

 

Dependendo do cenário teremos que adicionar também uma referência a Claims :

using System.Security.Claims;

E, finalmente, para obter a referência do usuário e pegar seu id, podemos usar o código abaixo:

var userId = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;

 

Em um cenário de uma aplicação ASP.NET Core que usa o EF Core e Claims você pode obter informações do usuário atualmente logado diretamente a partir das Claims do usuário.


As Claims são representações de informações sobre o usuário, como o ID do usuário, nome, email e outras informações personalizadas que podem ser armazenadas no contexto da autenticação.

 

Aqui está um exemplo de como você pode obter o usuário atual usando Claims:

 

using System.Security.Claims;
using Microsoft.AspNetCore.Mvc;

public class SeuController : Controller
{
    public IActionResult SuaAction()
    {
        // Verifique se o usuário está autenticado
        if (User.Identity.IsAuthenticated)
        {
            // Obtenha o ID do usuário atualmente autenticado a partir das Claims
            string userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            // Obtenha outros dados do usuário a partir das Claims
            string userName = User.FindFirst(ClaimTypes.Name)?.Value;
            string userEmail = User.FindFirst(ClaimTypes.Email)?.Value;
            // ... outras Claims personalizadas

            // Agora você tem as informações do usuário a partir das Claims

        }

        // ...
    }
}

Neste exemplo, verificamos se o usuário está autenticado usando User.Identity.IsAuthenticated.

Em seguida, usamos User.FindFirst(ClaimTypes.NameIdentifier) para encontrar a Claim que contém o ID do usuário.

Você pode usar métodos semelhantes para acessar outras Claims, como nome, email ou qualquer outra informação personalizada que você tenha definido para o usuário durante o processo de autenticação.

E como fazer isso no Blazor ? 
 

Para o Blazor pouca coisa muda.
 

Podemos fazer a injeção e obter o usuário usando o seguinte código :

 

@page "/"
 

@using System.Security.Claims
 

@inject Microsoft.AspNetCore.Http.IHttpContextAccessor _httpContextAccessor


<h1>Ola , Mundo!</h1>


Bem-vindo , @user.


<SurveyPrompt Title="Como o Blazor esta funcionando ?" />


@code {


    private string user = "";


    protected override void OnInitialized()
    {
        user = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;

        base.OnInitialized();
    }
}


Resumindo:

E estamos conversados...

"Revesti-vos, pois, como eleitos de Deus, santos e amados, de entranhas de misericórdia, de benignidade, humildade, mansidão, longanimidade;"
Colossenses 3:12



Isaías 9:6
Porque um menino nos nasceu, um filho se nos deu, e o principado está sobre os seus ombros, e se chamará o seu nome: Maravilhoso, Conselheiro, Deus Forte, Pai da Eternidade, Príncipe da Paz.

Isaías 9:6

Referências:


José Carlos Macoratti