Aktuelle Benutzer-ID in ASP.NET Identity 2.0 abrufen


81

Ich habe gerade auf die neue 2.0-Version des Identity Framework umgestellt. In 1.0 konnte ich ein Benutzerobjekt mit bekommen manager.FindByIdAsync(User.Identity.GetUserId()). Die GetUserId()Methode scheint in 2.0 nicht zu existieren.

Jetzt kann ich nur noch herausfinden, manager.FindByEmailAsync(User.Identity.Name)welches auf das Feld Benutzername in der Benutzertabelle verweist. In meiner Anwendung entspricht dies dem E-Mail-Feld.

Ich kann sehen, dass dies später zu Problemen führt, wenn jemand seine E-Mail aktualisieren muss. Gibt es eine Möglichkeit, das aktuell angemeldete Benutzerobjekt basierend auf einem unveränderlichen Wert (z. B. dem ID-Feld) im Identity 2.0 Framework abzurufen?


Wie haben Sie die UserId erhalten? Können Sie mir bitte mitteilen, dass ich auf dasselbe Problem stoße?
Ammar Khan

Antworten:


108

GetUserId()ist eine Erweiterungsmethode auf IIdentityund es ist in Microsoft.AspNet.Identity.IdentityExtensions. Stellen Sie sicher, dass Sie den Namespace mit hinzugefügt haben using Microsoft.AspNet.Identity;.



2
Das scheint mit Identität 2 nicht zu funktionieren. Irgendwelche Vorschläge bitte
Ammar Khan

2
Sollte noch da sein. Ich verwende derzeit GetUserId () in meinen Identity 2-Projekten.
Anthony Chu

4
In Identity 3.0 scheint dies in den System.Security.Principal-Namespace verschoben worden zu sein.
Sam

Gibt es eine Methode, um die aktuelle Benutzerrolle abzurufen? Wann sollte ich die Rolle festlegen? Hinweis: Ich verwende einen benutzerdefinierten Speicheranbieter.
Jeeva Jsb

61

Um CurrentUserId in Asp.net Identity 2.0 zu erhalten, müssen Sie zunächst Folgendes importieren Microsoft.AspNet.Identity:

C #:

using Microsoft.AspNet.Identity;

VB.NET:

Imports Microsoft.AspNet.Identity


Und dann rufen User.Identity.GetUserId()Sie an, wo immer Sie wollen:

strCurrentUserId = User.Identity.GetUserId()

Diese Methode gibt die aktuelle Benutzer-ID als definierten Datentyp für die Benutzer-ID in der Datenbank zurück (der Standardwert ist String).


1
Können Sie mir sagen, wo ich die entsprechende DLL für den Microsoft.AspNet.Identity-Namespace finden kann?
Franziee

14

Nur für den Fall, dass Sie wie ich sind und das ID-Feld der Benutzerentität ein Int oder etwas anderes als eine Zeichenfolge ist,

using Microsoft.AspNet.Identity;

int userId = User.Identity.GetUserId<int>();

wird den Trick machen


4

Ich hatte das gleiche Problem. Ich verwende derzeit Asp.net Core 2.2. Ich habe dieses Problem mit dem folgenden Code gelöst.

using Microsoft.AspNetCore.Identity;
var user = await _userManager.FindByEmailAsync(User.Identity.Name);

Ich hoffe, dass dies jemandem nützlich sein wird.


1
Du hast mein Leben gerettet
Sam Tubb
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.