it-swarm.com.de

Ruft die Benutzer-ID des in Asp.Net MVC 5 angemeldeten Benutzers ab

Ich bin relativ neu in ASP.Net MVC und versuche jetzt, die integrierte Benutzeranmeldefunktion zu verwenden. Ich kann einen Benutzer in der Registrierungsansicht registrieren. Wenn ich versuche, mich mit dem erstellten Benutzer anzumelden, funktioniert dies auch. Ich werde zur Masterseite weitergeleitet.

Ich kann jedoch nicht die Benutzer-ID des aktuellen Benutzers ermitteln. Ich habe meinen Code im HomeController und im AccountController ausprobiert, aber beide haben nicht funktioniert. Die Anweisung in der ersten Zeile gibt immer null zurück.

var userID = User.Identity.GetUserId();

if (!string.IsNullOrEmpty(userID))
{
    var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(ApplicationDbContext.Create()));
    var currentUser = manager.FindById(User.Identity.GetUserId());
}

Muss ich etwas anderes tun, bevor ich die Benutzer-ID erhalte?

40
Philipp Eger

Die Antwort ist genau dort in Ihrem Code. Was bringt das zurück?

var userID = User.Identity.GetUserId();

Wenn Sie ASP.NET Identity verwenden, sollte after beim Anmelden (und Umleiten auf eine andere Seite) der IPrincipal.IIdentity Ein ClaimsIdentity sein. Sie können dies versuchen:

var claimsIdentity = User.Identity as ClaimsIdentity;
if (claimsIdentity != null)
{
    // the principal identity is a claims identity.
    // now we need to find the NameIdentifier claim
    var userIdClaim = claimsIdentity.Claims
        .FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier);

    if (userIdClaim != null)
    {
        var userIdValue = userIdClaim.Value;
    }
}

Der obige Codeblock ist nicht genau, aber im Wesentlichen das, was die Erweiterungsmethode IIdentity.GetUserId Bewirkt.

Wenn nichts davon funktioniert, ist der Benutzer möglicherweise noch nicht wirklich auf Ihrer Website angemeldet. Nach der Anmeldung müssen Sie auf eine andere Seite umleiten, bevor der Server das Authentifizierungscookie in den Browser schreibt. Dieser Cookie muss geschrieben werden, bevor der User.Identity Alle diese Anspruchsinformationen enthält (einschließlich des NameIdentifier) bei nachfolgenden Anforderungen .

54
danludwig