In meinem Projekt ASP verwende ich ASP.NET Identity 2.2.1. An vielen Stellen muss ich eine aktuelle (eingeloggte) Benutzer-E-Mail erhalten. Im Moment bin ich zu finden, dass die Benutzer dies mit:Security.Principal.IIdentity Erweiterung Methode zum Abrufen von Benutzer E-Mail
var user = await UserManager.FindByIdAsync(User.Identity.GetUserId<int>());
var email = user.Email;
Ich habe bemerkt, dass GetUserId<T>
ist eine Erweiterung Methode, die innerhalb IdentityExtensions
Klasse innerhalb Microsoft.AspNet.Identity
ich meine eigene Extension-Methode erstellt haben gefunden werden kann das vereinfacht die E-Mail bekommen, indem man sie erhalten, wie:
var email = User.Identity.GetUserEmail()
Unter meiner Erweiterung ist:
public static class MyIIdentityExtensions
{
public static string GetUserEmail(this IIdentity identity)
{
if (identity == null)
{
throw new ArgumentNullException("identity");
}
var ci = identity as ClaimsIdentity;
if (ci == null) return null;
var um = HttpContext.Current.GetOwinContext().GetUserManager<UserManager>();
if (um == null) return null;
var user = um.FindById(ci.GetUserId<int>());
if (user == null) return null;
return user.Email;
}
}
Aber es ist viel komplizierter, als build-in extension methods
Kann ich diese vereinfachen? Vielleicht gibt es dafür eine eingebaute Methode? Was ich will ist ein einfacher Weg, um Email
für den aktuell angemeldeten Benutzer von User.Identity zu erhalten.
zu bekommen ich habe ganz vergessen zu 'GenerateUserIdentityAsync' Methode. Ich habe sogar den gleichen Kommentar '// Fügen Sie hier benutzerdefinierte Benutzeransprüche hinzu. Ich habe noch eine weitere Frage: Kann ich diesen Anspruch vom JWT-Token entfernen, das zurückgegeben wird, wenn der Benutzer sich anmeldet? Was ich will, ist minimale Datenmenge in JWT-Token zurückgeben. Aber von anderer Seite, wenn ich diesen Anspruch von Token in allen Anfragen entferne, kann ich diese E-Mail-Adresse nicht bekommen, weil ich diesen Anspruch nicht habe. – Misiu
@Misiu diese Zeile von Kommentaren gibt es von Standard-Vorlage mvc5 :) Über Ihre zusätzliche Frage, ist es nicht klar, was Sie wollen. Sie möchten den Anspruch für einige Anfragen hinzufügen? – tmg
Sorry für Verwirrung. Ich möchte diesen Anspruch serverseitig zugänglich machen, aber nicht an den Client innerhalb des JWT-Tokens senden. Wahrscheinlich ist das nicht möglich, aber ich bin mir sicher. – Misiu