[解決済み] MVC 5 アクセス クレーム アイデンティティ ユーザーデータ
2022-07-17 10:22:57
質問
私は MVC 5 を使ったウェブアプリケーションを開発しています。 Entity Framework 5 データベースファースト のアプローチを使用しています。私は OWIN を使っています。以下は、私のアカウントコントローラ内のログインメソッドです。
public ActionResult Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = _AccountService.VerifyPassword(model.UserName, model.Password, false);
if (user != null)
{
var identity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, model.UserName), }, DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.Name, ClaimTypes.Role);
identity.AddClaim(new Claim(ClaimTypes.Role, "guest"));
identity.AddClaim(new Claim(ClaimTypes.GivenName, "A Person"));
identity.AddClaim(new Claim(ClaimTypes.Sid, user.userID)); //OK to store userID here?
AuthenticationManager.SignIn(new AuthenticationProperties
{
IsPersistent = model.RememberMe
}, identity);
return RedirectToAction("Index", "MyDashboard");
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
見ての通り、私は ClaimsIdentity を作成し、それにいくつかのクレームを追加し、それを OWIN を使って AuthenticationManager を使用してサインインを実行します。
私が抱えている問題は、私のアプリケーションの残りの部分、コントローラまたはRazor Viewsのいずれかで、クレームにアクセスする方法がわからないということです。
私はこのチュートリアルに記載されているアプローチを試しました。
例えば、Claimsに渡された値にアクセスするために、Controllerのコードで以下のように試してみました。
var ctx = HttpContext.GetOwinContext();
ClaimsPrincipal user = ctx.Authentication.User;
IEnumerable<Claim> claims = user.Claims;
おそらく、私はここで何かを見逃しているのでしょう。
アップデイト
Darinの回答に基づいて、彼のコードを追加しましたが、まだClaimsへのアクセスは表示されません。以下のスクリーンショットは、identity.Claimsにカーソルを置いたときに表示されるものを示しています。
どのように解決するのですか?
これを試してみてください。
[Authorize]
public ActionResult SomeAction()
{
var identity = (ClaimsIdentity)User.Identity;
IEnumerable<Claim> claims = identity.Claims;
...
}
関連
-
net core downlink tracking skywalking インストールと使いやすいチュートリアル
-
ASP.NET CoreでCAPの取引詳細を自動で有効にする
-
[解決済み] Server Error in '/' Application」エラーの解決方法を教えてください。
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] IIS 500.19 with 0x80070005 The requested page cannot be accessed because the related configuration data for the page is invalid error.
-
[解決済み] Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\"), Server.MapPath("/"). この違いは何ですか?
-
[解決済み] [Solved] ASP.NET MS11-100: 投稿されたフォームの値の最大数の制限を変更するにはどうしたらいいですか?
-
[解決済み] inheritInChildApplicationsを使用して子Webアプリケーションでweb.configの継承を回避する。
-
[解決済み] ASP.Net MVCとWebフォームを比較する最大のメリット
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
NETガベージコレクション GC診断ツール dotnet-gcmon 使用方法
-
ASP.NETでWeb.configからログインする際の正しいアカウントパスワードを確認する
-
ASP.NET Coreで複数のサービス実装クラスをインジェクトする方法
-
非同期タスクキャンセルと監視のネット実装
-
ajaxでポップアップアラートボックス
-
[解決済み] ASP.NET MVC - カスタムIIdentityまたはIPrincipalの設定
-
[解決済み] ASP.NET MVCコントローラは、Imageを返すことができますか?
-
[解決済み] ASP.NETの一時ファイルのクリーンアップ
-
[解決済み] フォーム認証のタイムアウトとsessionStateのタイムアウトの比較
-
[解決済み] ASP.NET MVCのHtml.ActionLinkに "active "クラスを追加する方法