Como obter o usuário atual em ASP.NET MVC
-
06-07-2019 - |
Pergunta
Em um modelo de formas, eu usei para obter o atual usuário conectado por:
Page.CurrentUser
Como faço para obter o usuário atual dentro de uma classe de controlador no ASP.NET MVC?
Solução
Se você precisa para obter o usuário de dentro do controlador, use a propriedade User
de Controller. Se você precisar dele do ponto de vista, gostaria de preencher o que você especificamente precisa no ViewData
, ou você pode apenas chamar usuário como eu acho que é uma propriedade de ViewPage
.
Outras dicas
Eu achei que as obras User
, isto é, User.Identity.Name
ou User.IsInRole("Administrator")
.
Tente HttpContext.Current.User
.
Public Shared Property atual () As System.Web.HttpContext
Membro do System.Web.HttpContextResumo:
Obtém ou define o objeto System.Web.HttpContext para a solicitação HTTP atual.Valores de retorno:
O System.Web.HttpContext para a corrente HTTP pedido
Você pode obter o nome do usuário no ASP.NET MVC4 assim:
System.Web.HttpContext.Current.User.Identity.Name
Sei que este é realmente velho, mas eu estou apenas começando com ASP.NET MVC, então eu pensei que eu ia ficar meus dois centavos em:
-
Request.IsAuthenticated
informa se o usuário é autenticado. -
Page.User.Identity
dá-lhe a identidade do usuário conectado.
Eu uso:
Membership.GetUser().UserName
Eu não estou certo de que este irá trabalhar em ASP.NET MVC, mas vale a pena um tiro:)
ficar logado usuário: System.Web.HttpContext.Current.User.Identity.Name
Para fazer referência a um ID de usuário criado usando autenticação simples construído em ASP.NET MVC 4 em um controlador para fins de filtragem (que é útil se você estiver usando o banco de dados primeiro e Entity Framework 5 para gerar ligações de Code-First e suas tabelas são estruturados de modo que uma chave estrangeira para o ID do usuário é utilizado), você pode usar
WebSecurity.CurrentUserId
Uma vez que você adicionar uma instrução using
using System.Web.Security;
UserName com:
User.Identity.Name
Mas se você precisa para obter apenas o ID, você pode usar:
using Microsoft.AspNet.Identity;
Assim, você pode obter diretamente o ID do usuário:
User.Identity.GetUserId();
Esta página pode ser o que você está procurando:
Usando Page.User.Identity.Name em MVC3
Você só precisa User.Identity.Name
.
Use System.Security.Principal.WindowsIdentity.GetCurrent().Name
.
Isto irá obter o atual usuário logado do Windows.
Podemos usar seguinte código para obter o atual usuário conectado em ASP.Net MVC:
var user= System.Web.HttpContext.Current.User.Identity.GetUserName();
Além disso
var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'
Environment.UserName - Will Display format : 'Username'
Por que vale a pena, em ASP.NET MVC 3 você pode apenas usar usuário que retorna o usuário para a solicitação atual.
Se você estiver dentro de sua página de login, em evento LoginUser_LoggedIn por exemplo, Current.User.Identity.Name irá retornar um valor vazio, então você tem que usar yourLoginControlName.UserName propriedade.
MembershipUser u = Membership.GetUser(LoginUser.UserName);
IPrincipal currentUser = HttpContext.Current.User;
bool writeEnable = currentUser.IsInRole("Administrator") ||
...
currentUser.IsInRole("Operator");
var ticket = FormsAuthentication.Decrypt(
HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName].Value);
if (ticket.Expired)
{
throw new InvalidOperationException("Ticket expired.");
}
IPrincipal user = (System.Security.Principal.IPrincipal) new RolePrincipal(new FormsIdentity(ticket));
Se acontecer de você estar trabalhando no Active Directory em uma intranet, aqui estão algumas dicas:
(Windows Server 2012)
Running qualquer coisa que fala com AD em um servidor Web requer um monte de mudanças e paciência. Desde quando executado em um servidor web IIS vs. local / o IIS Express é executado na identidade do AppPool assim, você tem que configurá-lo para representar quem acessa o site.
Como obter o atual usuário conectado em um diretório ativo quando sua aplicação ASP.NET MVC está sendo executado em um servidor web dentro da rede:
// Find currently logged in user
UserPrincipal adUser = null;
using (HostingEnvironment.Impersonate())
{
var userContext = System.Web.HttpContext.Current.User.Identity;
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, ConfigurationManager.AppSettings["AllowedDomain"], null,
ContextOptions.Negotiate | ContextOptions.SecureSocketLayer);
adUser = UserPrincipal.FindByIdentity(ctx, userContext.Name);
}
//Then work with 'adUser' from here...
Você deve envolver todas as chamadas que têm a ver com o 'contexto do Active Directory' a seguir para que ele está agindo como o ambiente de hospedagem para obter as informações AD:
using (HostingEnvironment.Impersonate()){ ... }
Você também deve ter conjunto impersonate
a verdade no seu web.config:
<system.web>
<identity impersonate="true" />
Você deve ter a autenticação do Windows em no web.config:
<authentication mode="Windows" />
Você pode usar o seguinte código:
Request.LogonUserIdentity.Name;
Em Asp.net Mvc Identidade 2, Você pode obter o nome do usuário atual por:
var username = System.Web.HttpContext.Current.User.Identity.Name;
No Gerenciador do IIS, em Autenticação, disable: 1) Autenticação Anónimos 2) Autenticação de Formulários
Em seguida, adicione o seguinte ao seu controlador, para lidar com o teste contra a implantação do servidor:
string sUserName = null;
string url = Request.Url.ToString();
if (url.Contains("localhost"))
sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
sUserName = User.Identity.Name;