この同様の質問を参照してください: User.Identity でより多くのユーザー プロパティにアクセスする必要があります
User.Identity オブジェクトに関連するプロパティに簡単にアクセスできるようにする Razor ビューで使用するカスタム認証方法を作成したいと考えていますIdentityUser
が、その方法がわかりません。このViewContextExtensionメソッドを使用する代わりにUser.Identity.GetUserName()
、 、 などに似たカスタム拡張機能をいくつか作成したいと考えています。私の認証タイプは現在、VS2013 MVC5 テンプレートのデフォルト タイプです。Shoe が述べたように、ユーザーがサインインした後にこのクレームを挿入する必要があります。User.Identity.GetUserById()
DefaultAuthenticationTypes.ApplicationCookie
私の質問は次のとおりです。
this IIdentity
IPrincipalの下に out パラメーターを持つカスタム クレームを作成する方法と場所を教えてください。
これにより、Identity 2.0 を使用して単一のアプリに複数の DbContext がある DDD 設定のエンティティのビューで CookieAuthentication を介してユーザー プロパティにアクセスできます。最終的には WebAPI を使用しますが、今のところはできるだけシンプルに保ちたいと考えています。この SO Q&Aを見つけましたが、チケットを使用した Web フォームを対象としています。チケットとトークンの違いもわかりませんか?
ViewContext
これは、ベース コントローラーから使用する現在のアプローチです。
意見:
@using Microsoft.AspNet.Identity
@using Globals.Helpers
@using Identity //custom Identity for Domain
@using Microsoft.AspNet.Identity.Owin
@if (Request.IsAuthenticated)
{
var url = @ViewContext.BaseController().GetAvatarUrlById(User.Identity.GetUserId<int>());
//...
}
BaseController.cs
public string GetAvatarUrlById(int id)
{
var user = UserManager.FindById(id);
return "../../" + user.ImageUrl;
}
Extensions.cs
public static class ViewContextExtension
{
public static BaseController BaseController(this ViewContext view)
{
var baseController = (BaseController)view.Controller;
return baseController;
}
}
私が探しているのは、どこでどのように?
意見:
<img src="@User.Identity.GetAvatarUrl()" alt="User.Identity.GetAvatarUrl()" />
解決
私は単純にExtension.csファイルを編集し、_LoginPartial.cshtml に使用される Base コントローラーの継承を使用して、ViewContextExtension
クラスを編集しました。
#region ViewContextExt
public static class ViewContextExtension
{
public static BaseController BaseController(this ViewContext view)
{
var baseController = (BaseController)view.Controller;
return baseController;
}
public static string GetAvatarUrl(this IIdentity identity)
{
return ((ClaimsIdentity)identity).Claims.First(c => c.Type == "AvatarUrl").Value;
}
}
}
# endregion