- Jak mogę uzyskać identyfikator aktualnie zalogowanego użytkownika w MVC 5 ? Wypróbowałem sugestie StackOverflow, ale wydaje się, że nie są one przeznaczone dla MVC 5.
- Jaka jest najlepsza praktyka MVC 5 dotycząca przypisywania rzeczy użytkownikom? (np.
User
powinien miećItems
. Czy powinienem przechowywać użytkownikaId
wItem
? Czy mogę rozszerzyćUser
klasę oList<Item>
właściwość nawigacji?
Używam „Indywidualnych kont użytkowników” z szablonu MVC.
Próbowałem tych:
- Jak uzyskać bieżącego użytkownika w aplikacji MVC?
- Jak uzyskać bieżącego użytkownika w ASP.NET MVC
- Zalogować się w id użytkownika - powoduje to:
„Membership.GetUser ()” ma wartość null.
c#
asp.net
asp.net-mvc
asp.net-mvc-5
asp.net-identity
Adam Szabo
źródło
źródło
HttpContext.Current.User.Identity.Name
to nazwa aktualnie zalogowanego użytkownika.Item
tworzonego przez niego użytkownika, ale nie na podstawie nazwy użytkownika (może się to zmienić). To nie działa, ponieważ `` HttpContext.Current '' System.Web.HttpContextBase 'nie zawiera definicji dla' Current 'i nie można znaleźć metody rozszerzenia' Current 'akceptującej pierwszy argument typu' System.Web.HttpContextBase '( brakuje ci dyrektywy using lub odwołania do zestawu?) `. Czy na pewno Twoje rozwiązanie jest przeznaczone dla MVC 5?Odpowiedzi:
Jeśli kodujesz w kontrolerze ASP.NET MVC, użyj
Warto o tym wspomnieć
User.Identity.IsAuthenticated
iUser.Identity.Name
będzie działać bez dodawania powyższegousing
stwierdzenia. AleGetUserId()
nie będzie bez niego.Jeśli jesteś w klasie innej niż kontroler, użyj
W domyślnym szablonie MVC 5 identyfikator użytkownika to identyfikator GUID przechowywany jako ciąg.
Nie ma jeszcze sprawdzonych metod, ale znalazłem kilka cennych informacji na temat rozszerzania profilu użytkownika:
Identity
: https://devblogs.microsoft.com/aspnet/introducing-asp-net-identity-a-membership-system-for-asp-net-applications/źródło
GetUserId
jest to metoda rozszerzenia przechowywana na doleAss_Start\IdentityConfig.cs
, gdziekolwiek chcesz jej użyć, jeśli w innej przestrzeni nazw, musisz ustawićusing Microsoft.AspNet.Identity
rozszerzenie, aby było widoczne.Spróbuj czegoś takiego:
Działa z RTM.
źródło
Jeśli chcesz, aby obiekt ApplicationUser był w jednym wierszu kodu (jeśli masz zainstalowaną najnowszą wersję ASP.NET Identity), spróbuj:
Będziesz potrzebować następujących instrukcji using:
źródło
Uzyskanie identyfikatora jest dość proste i rozwiązałeś to.
Twoje drugie pytanie jest jednak nieco bardziej skomplikowane.
Tak więc to wszystko jest teraz przed wydaniem, ale typowy problem, z którym się spotykasz, polega na rozszerzaniu użytkownika o nowe właściwości (lub o kolekcję elementów, o którą masz pytanie).
Po wyjęciu z pudełka otrzymasz plik o nazwie
IdentityModel
w folderze Models (w momencie pisania). Tam masz kilka zajęć;ApplicationUser
iApplicationDbContext
. Aby dodać swoją kolekcjęItems
, będziesz chciał zmodyfikowaćApplicationUser
klasę, tak jak gdyby była to normalna klasa, której używasz z Entity Framework. W rzeczywistości, jeśli spojrzysz szybko pod maskę, zobaczysz, że wszystkie klasy związane z tożsamością (użytkownik, rola itp.) Są teraz tylko POCO z odpowiednimi adnotacjami danych, więc dobrze się bawią z EF6.Następnie musisz wprowadzić pewne zmiany w
AccountController
konstruktorze, aby wiedział, jak używać Twojego DbContext.Teraz uzyskanie całego obiektu użytkownika dla zalogowanego użytkownika jest trochę ezoteryczne, szczerze mówiąc.
Ta linia wykona zadanie i będziesz mógł uzyskać dostęp,
userWithItems.Items
jak chcesz.HTH
źródło
AccountController
?Czuję twój ból, próbuję zrobić to samo. W moim przypadku chcę tylko wyczyścić użytkownika.
Utworzyłem podstawową klasę kontrolera, z której dziedziczą wszystkie moje kontrolery. W nim nadpisuję
OnAuthentication
i ustawiamfilterContext.HttpContext.User to null
To najlepsze, co udało mi się do tej pory ...
źródło
źródło
jeśli ktokolwiek ma taką sytuację: tworzę weryfikację e-mail, aby zalogować się do mojej aplikacji, więc moi użytkownicy nie są jeszcze zalogowani, jednak skorzystałem z poniższego, aby sprawdzić, czy adres e-mail wprowadzony przy logowaniu jest odmianą rozwiązania @firecape
będziesz potrzebować również:
i
źródło
W .Net MVC5 core 2.2 używam HttpContext.User.Identity.Name. U mnie to zadziałało.
źródło
W ten sposób otrzymałem identyfikator AspNetUser i wyświetliłem go na mojej stronie głównej
W metodzie HomeController Index () umieściłem następujący kod
Na stronie widoku po prostu zadzwoń
Uruchom projekt, a będziesz mógł zobaczyć swój identyfikator użytkownika
źródło