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?
c#
asp.net
asp.net-identity
jasonpresley
źródło
źródło
Odpowiedzi:
GetUserId()
to metoda rozszerzenia włączonaIIdentity
i znajduje się wMicrosoft.AspNet.Identity.IdentityExtensions
. Upewnij się, że dodałeś przestrzeń nazw zusing Microsoft.AspNet.Identity;
.źródło
Aby uzyskać identyfikator CurrentUserId w Asp.net Identity 2.0, przy pierwszym imporcie
Microsoft.AspNet.Identity
:DO#:
using Microsoft.AspNet.Identity;
VB.NET:
A potem dzwoń
User.Identity.GetUserId()
wszędzie, gdzie chcesz: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
).źródło
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
źródło
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.
źródło