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?

Foi útil?

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.HttpContext

Resumo:
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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top