web-dev-qa-db-ja.com

ASP.NET MVCで現在のユーザーを取得する方法

フォームモデルでは、現在のログインユーザーを取得するために使用していました。

Page.CurrentUser

ASP.NET MVCのコントローラクラス内に現在のユーザーを取得する方法を教えてください。

258
Serhat Ozgel

コントローラ内からユーザを取得する必要がある場合は、ControllerのUserプロパティを使用してください。あなたがビューからそれを必要とするならば、私はあなたが特に必要とするものをViewDataに入れるでしょう、あるいは私はそれがViewPageの特性であると思うのであなたはただUserを呼ぶことができます。

250
Haacked

Userが機能すること、つまりUser.Identity.NameまたはUser.IsInRole("Administrator")が機能することがわかりました。

188
Pieter

HttpContext.Current.Userを試してください。

System.Web.HttpContextとしてのPublic Shared Property Current()
System.Web.HttpContextのメンバー

概要:
現在のHTTPリクエストに対するSystem.Web.HttpContextオブジェクトを取得または設定します。

戻り値
現在のHTTPリクエストに対するSystem.Web.HttpContext

55
dove

あなたはこのようにASP.NET MVC4でユーザーの名前を得ることができます:

System.Web.HttpContext.Current.User.Identity.Name
36
radbyx

これは本当に古いことだと思いますが、私はASP.NET MVCを使い始めたばかりなので、次の2つの点に固執すると思いました。

  • Request.IsAuthenticatedは、ユーザーが認証されたかどうかを知らせます。
  • Page.User.IdentityはあなたにログインしたユーザーのIDを与えます。
20
jrb

私が使う:

Membership.GetUser().UserName

これがASP.NET MVCで機能するかどうかはわかりませんが、試してみる価値があります。

16
Sean

ログインユーザー名:System.Web.HttpContext.Current.User.Identity.Name

11
tifoz

フィルタリング目的でASP.NET MVC 4に組み込まれている単純認証を使用して作成されたユーザーIDをコントローラーで参照するため(これは、データベースファーストおよびEntity Framework 5を使用してコードファーストバインディングを生成し、テーブルが構造化されている場合に役立ちます) userIDへの外部キーが使用されていることを

WebSecurity.CurrentUserId

usingステートメントを追加したら

using System.Web.Security;
9
MattC

ユーザー名:

User.Identity.Name

しかし、IDだけを取得する必要がある場合は、次のものを使用できます。

using Microsoft.AspNet.Identity;

そのため、ユーザーIDを直接取得できます。

User.Identity.GetUserId();

System.Security.Principal.WindowsIdentity.GetCurrent().Nameを使用してください。

これにより、現在ログインしているWindowsユーザーが取得されます。

5
Clay Smith

このページはあなたが探しているものかもしれません:
MVC3でPage.User.Identity.Nameを使用

User.Identity.Nameが必要です。

5
heriawan

ログインページの内側にいる場合、たとえばLoginUser_LoggedInイベントで、Current.User.Identity.Nameは空の値を返すので、yourLoginControlName.UserNameプロパティを使用する必要があります。

MembershipUser u = Membership.GetUser(LoginUser.UserName);
4
live-love

その価値があるために、ASP.NET MVC 3では、現在のリクエストに対してユーザーを返すUserを使用することができます。

4
Pieter

次のコードを使用して、ASP.Net MVCで現在ログインしているユーザーを取得できます。

var user= System.Web.HttpContext.Current.User.Identity.GetUserName();

また

var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'

Environment.UserName - Will Display format : 'Username'
4
Raj Baral
IPrincipal currentUser = HttpContext.Current.User;
bool writeEnable = currentUser.IsInRole("Administrator") ||
        ...
                   currentUser.IsInRole("Operator");
3

以下のコードを使用することができます。

Request.LogonUserIdentity.Name;
2
Rajeev Jayaswal

イントラネット上のActive Directoryで作業している場合は、以下のヒントがあります。

(Windows Server 2012)

Webサーバー上でADと対話するものを実行するには、たくさんの変更と忍耐力が必要です。ローカルIIS/IIS Expressと比較してWebサーバー上で実行する場合はAppPoolのIDで実行されるため、サイトにアクセスしたユーザーを偽装するように設定する必要があります。

ASP.NET MVCアプリケーションがネットワーク内のWebサーバーで実行されているときにActive Directoryに現在ログインしているユーザーを取得する方法:

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

AD情報を取得するホスティング環境として機能するように、次のように「Active Directoryコンテキスト」に関連する呼び出しをすべてラップする必要があります。

using (HostingEnvironment.Impersonate()){ ... }

Web.configでもimpersonateをtrueに設定する必要があります。

<system.web>
    <identity impersonate="true" />

Web.configでWindows認証が必要です。

<authentication mode="Windows" />
2
Beau D'Amore
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));
2
Ognyan Dimitrov

Asp.net Mvc ID 2では、現在のユーザー名を次の方法で取得できます。

var username = System.Web.HttpContext.Current.User.Identity.Name;
1

IISマネージャの[認証]で、以下を無効にします。1)匿名認証2)フォーム認証

次に、テストとサーバー配備の両方を処理するために、以下をコントローラに追加します。

string sUserName = null;
string url = Request.Url.ToString();

if (url.Contains("localhost"))
  sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
  sUserName = User.Identity.Name;
0
Daniel King