Pobierz bieżący identyfikator użytkownika w ASP.NET Identity 2.0

81

Właśnie przełączyłem się na nową wersję 2.0 Identity Framework. W 1.0 mogłem uzyskać obiekt użytkownika za pomocą manager.FindByIdAsync(User.Identity.GetUserId()). Wydaje się, że GetUserId()metoda nie istnieje w wersji 2.0.

Teraz wszystko, co mogę dowiedzieć się, to użyć manager.FindByEmailAsync(User.Identity.Name)odniesienia do pola nazwy użytkownika w tabeli użytkowników. W mojej aplikacji jest to takie samo, jak pole e-mail.

Widzę, że powoduje to problemy, gdy ktoś musi zaktualizować swój adres e-mail. Czy istnieje sposób, aby uzyskać bieżący zalogowany obiekt użytkownika na podstawie niezmiennej wartości (takiej jak pole id) w strukturze Identity 2.0?

jasonpresley
źródło
Skąd masz identyfikator użytkownika? Czy możesz dać mi znać, mam ten sam problem.
Ammar Khan

Odpowiedzi:

108

GetUserId()to metoda rozszerzenia włączona IIdentityi znajduje się w Microsoft.AspNet.Identity.IdentityExtensions. Upewnij się, że dodałeś przestrzeń nazw z using Microsoft.AspNet.Identity;.

Anthony Chu
źródło
Zobacz też: stackoverflow.com/questions/20925822/…
Chris Patterson
2
Wydaje się, że to nie działa z Identity 2. Proszę o wszelkie sugestie
Ammar Khan
2
Powinien nadal tam być. Używam GetUserId () w moich projektach Identity 2 w tej chwili.
Anthony Chu
4
W Identity 3.0 wygląda na to, że została przeniesiona do przestrzeni nazw System.Security.Principal.
Sam,
Czy istnieje metoda uzyskania aktualnej roli użytkownika? kiedy powinienem ustawić rolę? Uwaga: używam niestandardowego dostawcy pamięci.
Jeeva Jsb
61

Aby uzyskać identyfikator CurrentUserId w Asp.net Identity 2.0, przy pierwszym imporcie Microsoft.AspNet.Identity:

DO#:

using Microsoft.AspNet.Identity;

VB.NET:

Imports Microsoft.AspNet.Identity


A potem dzwoń User.Identity.GetUserId()wszędzie, gdzie chcesz:

strCurrentUserId = User.Identity.GetUserId()

Ta metoda zwraca bieżący identyfikator użytkownika zgodnie z określonym typem danych dla identyfikatora użytkownika w bazie danych (wartość domyślna to String).

Moshtaf
źródło
1
czy możesz mi powiedzieć, gdzie mogę znaleźć odpowiednią bibliotekę DLL dla przestrzeni nazw Microsoft.AspNet.Identity?
Franziee
15

Na wypadek, gdybyś był podobny do mnie, a pole Id jednostki użytkownika to Int lub coś innego niż ciąg,

using Microsoft.AspNet.Identity;

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

da rade

Seth IK
źródło
4

Miałem ten sam problem. Obecnie używam Asp.net Core 2.2. Rozwiązałem ten problem za pomocą następującego fragmentu kodu.

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

Mam nadzieję, że komuś się to przyda.

Mohsin
źródło
1
Uratowałeś mi życie
Sam Tubb