Ich habe eine eckige 2-Anwendung mit .NET Core und MVC erstellt. Ich möchte die Login-ID des Benutzers kennen. Wie wird die ID eines Benutzers im .net Core angemeldet?
Dies ist meine erste kantige Anwendung. Ich habe folgenden Link zum Starten von https://blogs.msdn.Microsoft.com/webdev/2017/02/14/building-single-page-applications-on-asp-net-core-with-javascriptservices verwendet/
Ich möchte Windows-Authentifizierung verwenden, um die Anmelde-ID in einem Controller zu erhalten.
Das hängt wirklich davon ab, welche Art von Authentifizierung Sie in Ihrer App haben.
In Anbetracht Ihrer Erwähnung von Angular bin ich nicht sicher, welches Framework Sie für die Authentifizierung verwenden und welche Einstellungen Sie vornehmen.
Um Sie in die richtige Richtung zu bewegen, erhalten Sie den entsprechenden Anspruch von der Benutzeridentität. Etwas wie das:
var ident = User.Identity as ClaimsIdentity;
var userID = ident.Claims.FirstOrDefault(c => c.Type == idClaimType)?.Value;
dabei ist idClaimType
der Typ des Anspruchs, in dem Ihre Identität gespeichert ist. Je nach Rahmen wäre das normalerweise entweder der FallClaimTypes.NameIdentifier
(= "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"
)
oderJwtClaimTypes.Subject
(= "sub"
)
Wenn Sie Asp.Net Core Identity verwenden, können Sie deren Hilfemethode für die Variable UserManager
verwenden, um den Zugriff darauf zu vereinfachen:
UserManager<ApplicationUser> _userManager;
[…]
var userID = _userManager.GetUserId(User);
Angenommen, Sie verwenden ASP.NET Identity (in Ihrer Controller-Aktion):
User.Identity.GetUserId();
oder (wenn Sie einen benutzerdefinierten Schlüsseltyp verwenden)
User.Identity.GetUserId<TKey>();
Probier diese:
var user = await userManager.GetUserAsync(HttpContext.User);
var ID = user.Id;
private readonly ApplicationDbContext _dbContext;
private readonly IHttpContextAccessor _httpContext;
private readonly string _userId;
public MyController(UserManager<ApplicationUser> _userManager, IHttpContextAccessor _httpContext)
{
this._userManager = _userManager;
this._httpContext = _httpContext;
_userId = this._userManager.GetUserId(this._httpContext.HttpContext.User);
}
Ich benutze dieses:
private UserManager<ApplicationUser> _userManager;
public ClassConstructor(UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
public void OnGet()
{
var id = _userManager.GetUserId(User);
}
p.s. Weitere nützliche Methoden finden Sie in UserManager.