none
Wie komme ich an die UserId? RRS feed

  • Frage

  • Servus :)

    Ich möchte Datenbankaktionen ausführen und es soll die Id des derzeit angemeldeten Benutzers (Identity Framework) in der Datenbank als RefId hinterlegt werden, um diesem Elemente zuweisen und später nach User Filtern zu können. Nur wir komme ich an diese Id?

    Im Identity Framework - beispielsweise in der Datei /Areas/Pages/Account/Manage/indes.cshtml.cs ist der angemeldete User als 'User' abrufbar und die Id über GetUserId(User) zu ermitteln.

    public async Task<IActionResult> OnGetAsync()
            {
                var user = await _userManager.GetUserAsync(User);
                if (user == null)
                {
                    return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
                }
    
                await LoadAsync(user);
                return Page();
            }

    Woher kommt dieser? Wie kann ich ihn in einer eigenen Klasse abrufen und in meinen Blazor @code - Blöcken nutzen? 

    LG

    datekk


    .::datekk::.

    Freitag, 13. November 2020 07:28

Antworten

  • Hab es gelöst... Der Ansatz über den User-Manager war wahrscheinlich nicht ganz korrekt. Hier meine jetzige Lösung:

    public class UserMock : IUserInterface
        {
            
            private readonly IHttpContextAccessor _httpContextAccessor;
            public UserMock(IHttpContextAccessor httpContextAccessor)
            {
                 _httpContextAccessor = httpContextAccessor;
            }
            

            
            public string GetUsersId()
            {

                var userId = _httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
                return userId.ToString();
            }
        }


    .::datekk::.


    • Bearbeitet datekk2 Freitag, 13. November 2020 12:55
    • Als Antwort markiert datekk2 Montag, 16. November 2020 07:03
    Freitag, 13. November 2020 12:54

Alle Antworten

  • Hi,

    _userManager oder etwas darüber wird wohl per DI in die Seiten eingebunden. Das müsstest Du dann auch machen. Siehe bspw.:

      https://blazor-tutorial.net/dependency-injection


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 13. November 2020 08:31
    Moderator
  • An den Usermanager habe ich auch sofort gedacht und diesen per DI eingebunden

    @inject Microsoft.AspNetCore.Identity.UserManager<AspNetUsers> _user

    Leider gibt _user aber keine Felder wie Id direkt aus, sondern nur die Methode GetUserId(User).. und diese verlangt ein User-Objekt vom Typ System.Security.Claims.ClaimsPrincipal

    nur woher nehmen? Wie im Eröffnungspost geschildert, wird 'User' irgendwie und irgendwo ein Wert bzw. ein Objekt zugeordnet. Ich bin noch nicht durchgestiegen, wie das passiert.


    .::datekk::.



    • Bearbeitet datekk2 Freitag, 13. November 2020 10:50
    Freitag, 13. November 2020 10:32
  • Hab es gelöst... Der Ansatz über den User-Manager war wahrscheinlich nicht ganz korrekt. Hier meine jetzige Lösung:

    public class UserMock : IUserInterface
        {
            
            private readonly IHttpContextAccessor _httpContextAccessor;
            public UserMock(IHttpContextAccessor httpContextAccessor)
            {
                 _httpContextAccessor = httpContextAccessor;
            }
            

            
            public string GetUsersId()
            {

                var userId = _httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
                return userId.ToString();
            }
        }


    .::datekk::.


    • Bearbeitet datekk2 Freitag, 13. November 2020 12:55
    • Als Antwort markiert datekk2 Montag, 16. November 2020 07:03
    Freitag, 13. November 2020 12:54