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 :
|
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; |
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
base.OnInitialized(); |
Resumindo:
Certifique-se de que seu aplicativo tenha permissões para solicitar propriedades ou declarações do usuário;
Modifique a inicialização do seu aplicativo para adicionar os serviços necessários;
Implemente a propriedade Claim em seu código;
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
Referências: