Identity 2.0: Angepasste ClaimsIdentity erstellen, z. B. User.Identity.GetUserById <int> (int id) für die Validierung pro Anforderung

Siehe diese ähnliche Frage:Notwendiger Zugriff auf weitere Benutzereigenschaften in User.Identity

Ich möchte benutzerdefinierte Authentifizierungsmethoden für meine Razor Views erstellen, die einen einfachen Zugriff ermöglichen.IdentityUser Eigenschaften, die sich auf das User.Identity-Objekt beziehen, aber ich bin nicht sicher, wie ich vorgehen soll. Ich möchte mehrere benutzerdefinierte Erweiterungen erstellen, die @ ähnelUser.Identity.GetUserName(), User.Identity.GetUserById(), etc ... anstatt dieses @ zu verwend ViewContextExtension Methode. Mein Authentifizierungstyp ist derzeit der StandardtypDefaultAuthenticationTypes.ApplicationCookie aus VS2013 MVC5-Vorlage. Wie von Shoe angegeben, muss dieser Claim eingefügt werden, nachdem sich der Benutzer angemeldet hat.

Meine Fragen sind:

Wie und wo erstellen Sie einen benutzerdefinierten Anspruch mit dem out-Parameterthis IIdentity unter IPrincipal?

Auf diese Weise kann ich über CookieAuthentication in einer Ansicht auf Benutzereigenschaften für Entitäten in einer DDD-Einstellung zugreifen, in der ich mithilfe von Identity 2.0 über mehrere DbContexts in einer einzelnen App verfüge. Ich werde irgendwann WebAPI verwenden, aber jetzt möchte ich es so einfach wie möglich halten. Ich habe gefundendieses SO Q & A richtet sich jedoch an Web Forms mit Tickets. Sind Sie sich nicht sicher, ob es einen Unterschied zwischen Tickets und Tokens gibt?

Dies ist der aktuelle Ansatz, der @ verwendViewContext von einem Basiscontroller:

Aussicht

    @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;
        }
    }

Was ich suche ist aber wo & wie?

Aussicht

<img src="@User.Identity.GetAvatarUrl()" alt="User.Identity.GetAvatarUrl()" />

LÖSUN

Ich habe einfach das @ bearbeit Extension.cs -Datei und verwendete Vererbung für den Basis-Controller, der für die _LoginPartial.cshtml verwendet und das @ bearbeitet wiViewContextExtension class:

#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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage