2017-09-18 1 views
2

Ich habe eine eckige 2-Anwendung mit .NET Core und MVC erstellt. Ich möchte die Login-ID des Benutzers wissen. Wie wird die ID eines Benutzers in .net core eingeloggt?Wie Benutzer-ID des angemeldeten Benutzers in .NET Core 2.0 erhalten?

Dies ist meine erste eckige Anwendung. Ich verwendete folgenden Link zum Starten https://blogs.msdn.microsoft.com/webdev/2017/02/14/building-single-page-applications-on-asp-net-core-with-javascriptservices/

Ich möchte Windows-Authentifizierung verwenden, um Login-ID in einem Controller zu erhalten.

+0

Ich sehe keine Authentifizierung für die Anmeldung eingerichtet. Was verwenden Sie für die Anmeldung des Benutzers? –

Antwort

4

Sie Angenommen, verwenden ASP.NET Identität, was ist (in der Controller-Aktion):

User.Identity.GetUserId(); 

oder (wenn Sie einen benutzerdefinierten Schlüsseltyp verwenden)

User.Identity.GetUserId<TKey>(); 
+2

Das hängt wirklich davon ab, welche Art von Authentifizierung er verwendet. Dies ist eine Erweiterungsmethode von 'Microsoft.AspNet.Identity.Core', und er könnte es nicht einmal verwenden –

+0

Sie sind righe @ ArtiomChilaru. Jedenfalls nahm ich an, dass er den Standardansatz verwendet, weil er ihn nicht spezifiziert hat. Antwort bearbeitet. – OmarMuscatello

7

Das hängt wirklich davon ab Welche Art von Authentifizierung hast du in deiner App?

Wenn Sie Angular erwähnt haben, bin ich mir nicht sicher, welchen Rahmen Sie für die Authentifizierung verwenden und welche Einstellungen Sie vornehmen.

Um Sie in die richtige Richtung zu bewegen, ist Ihr Vorgehen die relevante Behauptung von der Benutzeridentität zu bekommen. Etwas wie folgt aus:

var ident = User.Identity as ClaimsIdentity; 
var userID = ident.Claims.FirstOrDefault(c => c.Type == idClaimType)?.Value; 

wo idClaimType die Art der Forderung ist, dass Ihre Identität speichert. Je nach Rahmen, wäre es in der Regel entweder
ClaimTypes.NameIdentifier (= "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier")
oder
JwtClaimTypes.Subject (= "sub")

Wenn Sie Asp.Net Core-Identität verwenden, könnten Sie ihre Erweiterungsmethode verwenden, um Zugriff zu vereinfachen es:

using Microsoft.AspNet.Identity; 
[…] 
var userID = User.Identity.GetUserId(); 
0

Versuchen sie dieses:

var user = await userManager.GetUserAsync(HttpContext.User); 
var ID = user.Id; 
0

Ich benutze diese ein:

private UserManager<ApplicationUser> _userManager; 

    public ClassConstructor(UserManager<ApplicationUser> userManager) 
    { 
     _userManager = userManager; 
    } 

    public void OnGet() 
    { 
     var id = _userManager.GetUserId(User); 
    } 

P. S. Sie können im UserManager nützlichere Methoden finden.

+0

UserManager injizierend, wie Sie in Ihrer Antwort haben, funktionierte das für mich: var id = _userManager.Users.First(); – StackOverflowUser

Verwandte Themen