Eu fiz isso antes com o MVC5 usando, User.Identity.GetUserId()
mas isso não parece funcionar aqui. O User.Identity
não tem o GetUserId()
método
estou usando Microsoft.AspNet.Identity
Eu fiz isso antes com o MVC5 usando, User.Identity.GetUserId()
mas isso não parece funcionar aqui. O User.Identity
não tem o GetUserId()
método
estou usando Microsoft.AspNet.Identity
System.Web.HttpContext.Current.User.Identity.Name
?Respostas:
Atualização na versão principal do ASP.NET> = 2.0
No controlador:
Em alguma outra classe:
Então você deve se registrar
IHttpContextAccessor
naStartup
classe da seguinte maneira:Para mais legibilidade, escreva os métodos de extensão da seguinte maneira:
Em seguida, use o seguinte:
fonte
null
.User.Identity.Name
, pode ser porque a autenticação anônima está ativada. ConseguiUser.Identity.Name
retornar meu domínio e nome de usuário expandindoProperties > launchSettings.json
e definindoanonymousAuthentication
parafalse
ewindowsAuthentication
paratrue
.Até o ASP.NET Core 1.0 RC1 :
É User.GetUserId () de System.Security.Claims espaço para nome .
Desde o ASP.NET Core 1.0 RC2 :
Agora você precisa usar o UserManager . Você pode criar um método para obter o usuário atual:
E obtenha informações do usuário com o objeto:
Nota: Você pode fazer isso sem usar um método para escrever linhas únicas como essa
string mail = (await _userManager.GetUserAsync(HttpContext.User))?.Email
, mas não respeita o princípio de responsabilidade única. É melhor isolar a maneira como você obtém o usuário, porque se algum dia você decidir alterar seu sistema de gerenciamento de usuários, como usar outra solução que não seja a Identity, será doloroso, pois você precisará revisar todo o código.fonte
você pode obtê-lo em seu controlador:
ou escreva um método de extensão como antes .Core v1.0
e obtenha onde o usuário ClaimsPrincipal estiver disponível :
fonte
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
Convert.ToInt32(User.FindFirstValue(ClaimTypes.NameIdentifier))
para obter um número inteiro de UserIdEu incluí o uso de System.Security.Claims e pude acessar o método de extensão GetUserId ()
NB: Eu já usava o Microsoft.AspNet.Identity, mas não conseguia obter o método de extensão. Então eu acho que os dois têm que ser usados em conjunto
EDIT : Esta resposta está desatualizada. Veja a resposta de Soren ou Adrien para obter uma maneira datada de conseguir isso no CORE 1.0.
fonte
var userId = User.GetUserId();
Somente para .NET Core 2.0 É necessário o seguinte para buscar o UserID do Usuário conectado em uma
Controller
classe:ou
por exemplo
fonte
Conforme declarado em algum lugar nesta postagem, o método GetUserId () foi movido para o UserManager.
Se você iniciou um projeto vazio, pode ser necessário adicionar o UserManger aos seus serviços em startup.cs. Caso contrário, esse já deve ser o caso.
fonte
você precisa importar Microsoft.AspNetCore.Identity & System.Security.Claims
fonte
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"
paraUser.FindFirstValue(ClaimTypes.NameIdentifier);
?Embora a resposta de Adrien esteja correta, você pode fazer tudo isso em uma única linha. Não há necessidade de função extra ou bagunça.
Funciona, verifiquei no ASP.NET Core 1.0
então você pode obter outras propriedades da variável como
user.Email
. Espero que isso ajude alguém.fonte
Para ASP.NET Core 2.0, Entity Framework Core 2.0, API do AspNetCore.Identity 2.0 ( https://github.com/kkagill/ContosoUniversity-Backend ):
O
Id
foi alterado paraUser.Identity.Name
Resposta:
fonte
this.User.Identity.Name
tende a ser o nome de usuário. No meu teste, o nome de usuário é um email, seja o login do usuário no registro ou o login externo (por exemplo, Facebook, Google). O código a seguir retorna o userId. Eu uso uma chave primária incrementada automaticamente para minha tabela de usuários de identidade, daí o int.Parse.int userId = int.Parse(this.User.FindFirstValue(ClaimTypes.NameIdentifier));
FindByIdAsync
não funciona como você está fornecendo um nome de usuário. Funciona quando você o substituiFindByNameAsync
.no
APiController
Algo assim, você receberá as reivindicações
fonte
User.Identity.GetUserId ();
não existe no asp.net identity core 2.0. a este respeito, eu consegui de maneira diferente. Eu criei uma classe comum para usar todo o aplicativo, devido à obtenção de informações do usuário.
criar uma classe comum PCommon e interface IPCommon adicionando referência
using System.Security.Claims
Aqui a implementação da classe comum
obter userId e nome na ação de inserção
Obrigado, Maksud
fonte
Para obter o ID do usuário atual nas visualizações de navalha, podemos injetar o UserManager na visualização da seguinte maneira:
Espero que você ache útil.
fonte
uso pode usar
por alguma razão, NameIdentifier agora recupera o nome de usuário (.net core 2.2)
fonte
Como administrador trabalhando no perfil de outras pessoas e você precisa obter o ID do perfil em que está trabalhando, você pode usar um ViewBag para capturar o ID, por exemplo, ViewBag.UserId = userId; enquanto userId é a string Parameter do método em que você está trabalhando.
fonte
Se você quiser isso no ASP.NET MVC Controller, use
Você precisa adicionar uma
using
declaração porqueGetUserId()
não estará lá sem ela.fonte
User.GetUserId()
e nãoUser.Identity.GetUserId()