Huidige gebruikers-ID ophalen in ASP.NET Identity 2.0

Ik ben net overgestapt op het gebruik van de nieuwe 2.0-versie van het Identity Framework. In 1.0 kon ik een gebruikersobject verkrijgen door manager.FindByIdAsync(User.Identity.GetUserId())te gebruiken. De methode GetUserId()lijkt niet te bestaan ​​in 2.0.

Het enige wat ik nu kan bedenken is om manager.FindByEmailAsync(User.Identity.Name)te gebruiken die verwijst naar het gebruikersnaamveld in de gebruikerstabel. In mijn applicatie is dit ingesteld op hetzelfde als het e-mailveld.

Ik zie dat dit later problemen veroorzaakt wanneer iemand zijn e-mail moet bijwerken. Is er een manier om het huidige ingelogde gebruikersobject te krijgen op basis van een onveranderlijke waarde (zoals het id-veld)in het Identity 2.0 Framework?


Antwoord 1, autoriteit 100%

GetUserId()is een extensiemethode op IIdentityen bevindt zich in Microsoft.AspNet.Identity.IdentityExtensions. Zorg ervoor dat je de naamruimte hebt toegevoegd met using Microsoft.AspNet.Identity;.


Antwoord 2, autoriteit 54%

Om CurrentUserId in Asp.net Identity 2.0 te krijgen, importeert u eerst Microsoft.AspNet.Identity:

C#:

using Microsoft.AspNet.Identity;

VB.NET:

Imports Microsoft.AspNet.Identity

En bel dan User.Identity.GetUserId()waar je maar wilt:

strCurrentUserId = User.Identity.GetUserId()

Deze methode retourneert het huidige gebruikers-ID als gedefinieerd gegevenstype voor het gebruikers-ID in de database (de standaard is String).


Antwoord 3, autoriteit 14%

Voor het geval je net als ik bent en het Id-veld van de gebruikersentiteit een Int is of iets anders dan een string,

using Microsoft.AspNet.Identity;
int userId = User.Identity.GetUserId<int>();

zal het lukken


Antwoord 4, autoriteit 5%

Ik had hetzelfde probleem. Ik gebruik momenteel Asp.net Core 2.2. Ik heb dit probleem opgelost met het volgende stukje code.

using Microsoft.AspNetCore.Identity;
var user = await _userManager.FindByEmailAsync(User.Identity.Name);

Ik hoop dat iemand hier iets aan heeft.

Other episodes