Zrobiłem to już wcześniej przy użyciu MVC5, User.Identity.GetUserId()
ale wydaje się, że tutaj nie działa. Nie User.Identity
ma GetUserId()
metody
ja używam Microsoft.AspNet.Identity
Zrobiłem to już wcześniej przy użyciu MVC5, User.Identity.GetUserId()
ale wydaje się, że tutaj nie działa. Nie User.Identity
ma GetUserId()
metody
ja używam Microsoft.AspNet.Identity
System.Web.HttpContext.Current.User.Identity.Name
?Odpowiedzi:
Aktualizacja w wersji ASP.NET Core> = 2,0
W kontrolerze:
W innej klasie:
Następnie należy zarejestrować się
IHttpContextAccessor
naStartup
zajęcia w następujący sposób:Aby uzyskać większą czytelność metod rozszerzenia zapisu w następujący sposób:
Następnie użyj w następujący sposób:
źródło
null
.User.Identity.Name
, może to być spowodowane włączeniem uwierzytelniania anonimowego. MogłemUser.Identity.Name
odzyskać moją domenę i nazwę użytkownika, rozwijającProperties > launchSettings.json
, ustawiającanonymousAuthentication
nafalse
iwindowsAuthentication
dotrue
.Do ASP.NET Core 1.0 RC1 :
To User.GetUserId () z przestrzeni nazw System.Security.Claims .
Od ASP.NET Core 1.0 RC2 :
Teraz musisz użyć UserManager . Możesz utworzyć metodę, aby pobrać bieżącego użytkownika:
I uzyskaj informacje o użytkowniku z obiektem:
Uwaga: Możesz to zrobić bez używania metody pisania pojedynczych wierszy, jak ta
string mail = (await _userManager.GetUserAsync(HttpContext.User))?.Email
, ale nie jest to zgodne z zasadą pojedynczej odpowiedzialności. Lepiej wyodrębnić sposób, w jaki zdobywasz użytkownika, ponieważ jeśli pewnego dnia zdecydujesz się zmienić system zarządzania użytkownikami, na przykład użyć innego rozwiązania niż tożsamość, będzie to bolesne, ponieważ będziesz musiał przejrzeć cały kod.źródło
możesz go pobrać w swoim kontrolerze:
lub napisz metodę rozszerzającą, taką jak poprzednio .Core v1.0
i uzyskaj wszędzie tam, gdzie jest dostępny User ClaimsPrincipal :
źródło
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
Convert.ToInt32(User.FindFirstValue(ClaimTypes.NameIdentifier))
aby uzyskać całkowity identyfikator użytkownikaUwzględniłem użycie System.Security.Claims i mogłem uzyskać dostęp do metody rozszerzenia GetUserId ()
Uwaga: już korzystałem z Microsoft.AspNet.Identity, ale nie mogłem uzyskać metody rozszerzenia. Więc myślę, że oba z nich muszą być używane w połączeniu ze sobą
EDYCJA : Ta odpowiedź jest teraz nieaktualna. Spójrz na odpowiedź Sorena lub Adriena, aby znaleźć przestarzały sposób osiągnięcia tego w CORE 1.0
źródło
var userId = User.GetUserId();
Tylko dla .NET Core 2.0 Poniższe są wymagane do pobrania identyfikatora użytkownika zalogowanego użytkownika w
Controller
klasie:lub
na przykład
źródło
Jak stwierdzono gdzieś w tym poście, metoda GetUserId () została przeniesiona do UserManager.
Jeśli uruchomiłeś pusty projekt, może być konieczne dodanie Menedżera użytkownika do usług w startup.cs. W przeciwnym razie powinno to już mieć miejsce.
źródło
musisz zaimportować Microsoft.AspNetCore.Identity & System.Security.Claims
źródło
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"
poUser.FindFirstValue(ClaimTypes.NameIdentifier);
?Chociaż odpowiedź Adriena jest poprawna, możesz to wszystko zrobić w jednej linii. Nie ma potrzeby korzystania z dodatkowej funkcji ani bałaganu.
Działa Sprawdziłem to w ASP.NET Core 1.0
wtedy możesz uzyskać inne właściwości zmiennej, takie jak
user.Email
. Mam nadzieję, że to komuś pomoże.źródło
W przypadku interfejsu API ASP.NET Core 2.0, Entity Framework Core 2.0, AspNetCore.Identity 2.0 ( https://github.com/kkagill/ContosoUniversity-Backend ):
Id
Została zmieniona naUser.Identity.Name
Odpowiedź:
źródło
this.User.Identity.Name
Jednak na podstawie mojego testu jest to nazwa użytkownika. W moim teście nazwa użytkownika to e-mail, czy użytkownik loguje się z rejestracji, czy loguje się z zewnętrznego loginu (np. Facebook, Google). Poniższy kod zwraca userId. Używam automatycznie zwiększanego klucza podstawowego dla mojej tabeli użytkowników tożsamości, stąd int.Parse.int userId = int.Parse(this.User.FindFirstValue(ClaimTypes.NameIdentifier));
FindByIdAsync
nie działa, ponieważ podajesz nazwę użytkownika. Działa, gdy zastąpisz goFindByNameAsync
.w
APiController
Coś takiego otrzymasz roszczenia
źródło
User.Identity.GetUserId ();
nie istnieje w rdzeniu tożsamości asp.net 2.0. w tym zakresie poradziłem sobie w inny sposób. stworzyłem wspólną klasę do wykorzystania w całej aplikacji, ze względu na uzyskiwanie informacji o użytkowniku.
utwórz wspólną klasę PCommon i interfejs IPCommon, dodając odniesienie
using System.Security.Claims
Tutaj implementacja wspólnej klasy
get userId i name w akcji insert
Dzięki, Maksud
źródło
Aby uzyskać bieżący identyfikator użytkownika w widokach maszynki do golenia, możemy wstrzyknąć UserManager w widoku w następujący sposób:
Mam nadzieję, że uznasz to za przydatne.
źródło
używać można użyć
z jakiegoś powodu NameIdentifier pobiera teraz nazwę użytkownika (.net core 2.2)
źródło
Jako administrator pracujący na profilach innych osób i potrzebujesz uzyskać identyfikator profilu, nad którym pracujesz, możesz użyć ViewBag do przechwycenia Id, np. ViewBag.UserId = userId; while userId jest ciągiem parametrów metody, nad którą pracujesz.
źródło
Jeśli chcesz to w kontrolerze ASP.NET MVC, użyj
Musisz dodać
using
oświadczenie, ponieważGetUserId()
bez niego nie będzie.źródło
User.GetUserId()
a nieUser.Identity.GetUserId()