ASP.NET Core で現在のユーザー情報を安全に取得する
現在ログインしているユーザーの ID を知ることは、安全でパーソナライズされた ASP.NET Core アプリケーションを構築するために重要です。 HttpContext.User
プロパティは、認証されたユーザーに関する豊富なクレームを提供します。
ただし、コントローラーのコンストラクター内で HttpContext
に直接アクセスすると、HTTP リクエスト コンテキストが設定される前にコンストラクターが実行されるため、多くの場合 null 結果が返されます。
ベスト プラクティス: アクション メソッドでのユーザー ID へのアクセス
最も信頼できる方法は、コントローラーのアクション メソッド内でユーザー ID の詳細を取得することです。 これにより、リクエストの処理中に HttpContext
にユーザー データが適切に設定されることが保証されます。
たとえば、ユーザーの ID を取得するには:
<code class="language-csharp">public ActionResult Index() { string userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value; // Further processing of user ID and claims... return View(); }</code>
代替: コンストラクター アクセスに IHttpContextAccessor を使用する
コントローラーのコンストラクター内でユーザー ID 情報が必要な場合は、IHttpContextAccessor
インターフェースを利用します。このインターフェイスは、コントローラーのライフサイクル段階に関係なく、現在の HTTP コンテキストへのアクセスを提供します。
これを実装する方法は次のとおりです:
IHttpContextAccessor
をコントローラーのコンストラクターに挿入します。HttpContext
プロパティ経由でユーザーの要求にアクセスします。<code class="language-csharp">public Controller(IHttpContextAccessor httpContextAccessor) { string userId = httpContextAccessor.HttpContext?.User.FindFirst(ClaimTypes.NameIdentifier)?.Value; // Subsequent use of user ID and claims... }</code>
IHttpContextAccessor
メソッドに Startup.ConfigureServices
を忘れずに登録してください:
<code class="language-csharp">public void ConfigureServices(IServiceCollection services) { services.AddHttpContextAccessor(); // ... other services }</code>
null 条件演算子 (?.
) を使用すると、HttpContext
またはクレームが null の場合の例外を防ぐことができます。 アクションメソッドへのアクセスの信頼性を優先して、ニーズに最も適したメソッドを選択してください。
以上がASP.NET Core で現在のユーザーの ID を確実に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。