Dostęp do ClaimsIdentity w Razor Page i Kontrolerze

0

Cześć,
Otóż dodając Identity, nie umiem się zorientować jak dostać się do Claima (przykładowo ID albo Username użytkownika). Tak wygląda kod używajac scaffold item => add identity => login. Jest to Razor Page, I teraz, chce wydobyć np. Role czy Id czy cokolwiek.
Po pierwsze, chciałbym uzyskać dostęp w kontrolerze, po drugie chciałbym użyć tego w Razor View

 if (result.Succeeded)
                {
              
              _logger.LogInformation("User logged in.");
                return LocalRedirect(returnUrl);

                }

Tak wygląda to obecnie u mnie (zmieniałem już to tysiąc razy)

if (result.Succeeded)
                {
              var user = await _userManager.FindByEmailAsync(Input.Email); //przykładowo
              await _userManager.AddClaimAsync(user, new Claim(ClaimTypes.Role, "NormalUser")) //dodanie Claim
              var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(user);
              await _signInManager.RefreshSignInAsync(user);
[...]

Czytałem, że to może pomóc ale pogubiłem się w tych Claimach, a co dopiero jakiś Threading:

Thread.CurrentPrincipal = claimsPrincipal;

Wiecie, nie czaje jak w View się do tego dostać Razor/C# Syntaxem(@).

Do czego ja z tym ogólnie zmierzam, przykładowo logując się w mojej "super aplikacji, wchodząc w ścieżke "/me", za pomoc Claima bym znajdował czy to UserName czy czy ID i tak bym mógłbym w kontrolerze przypisać różne wartości z bazy danych, przydałby się też w Ajaxie, żeby działać tylko na tym użytkowniku.

Chyba, że używa się jakiegoś User Manager w identity do wydobywania treści z bazy danych, choć póki co na takie coś się nie natkąłem.

2

O ile dobrze rozumiem co chcesz osiągnąć

User.Identity.GetUserId();

W ten sposób wyciągniesz id aktualnego użytkownika - czyli zalogowanego.
Z jego pomocą możesz wyciągać dowolne rzeczy z bazy przy pomocy np. LINQ.
W sumie mając np. adres e-mail również możesz to zrobić. Na tej samej zasadzie zapytaniami możesz dodawać coś do bazy.

Żeby wyświetlić coś z kontrolera w widoku, np.
"Witaj @user" możesz przypisać pobraną w kontrolerze wartość do ViewBag i wtedy wykorzystać.
Kontroler

ViewBag.Name = "Jacek"

Widok

@ViewBag.Name
1

Aby pobrać użytkownika użyj UserManager<IdentityUser>
https://stackoverflow.com/questions/38751616/asp-net-core-identity-get-current-user
Aby sprawdzić, w jakich użytkownik jest rolach użyj RoleManager
Aby sprawdzić czy użytkownik jest w roli użyj userManager.IsInRole()

0

Dzięki, po prostu nie widziałem że istnieje taki obiekt jak User i tam są te wszystkie defaultowe Claimy.
Bardzo mnie zastanawiołu, gdzie "pod spodem" ich przypisywanie się dzieje, w docach microsoftu w dziale Autentykacja i Autoryzacja póki co przejrzałem, nie widziałem żadnej wzmianki o tym User.
Dzięki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1