I have created CustomClaimType to store user id:
public static class CustomClaimTypes
{
public const string UserId = \"UserId\
For adding extra claims to Identity, you could implement custom CustomClaimsPrincipalFactory.
CustomClaimsPrincipalFactory
public class CustomClaimsPrincipalFactory : UserClaimsPrincipalFactory>
{
public CustomClaimsPrincipalFactory(UserManager> userManager,
IOptions optionsAccessor)
: base(userManager, optionsAccessor)
{
}
public async override Task CreateAsync(IdentityUser user)
{
var principal = await base.CreateAsync(user);
// Add your claims here
((ClaimsIdentity)principal.Identity).AddClaims(
new[] { new Claim(ClaimTypes.Name, user.UserName),
new Claim(CustomClaimTypes.UserId, user.Id.ToString())
});
return principal;
}
}
Register CustomClaimsPrincipalFactory
public void ConfigureServices(IServiceCollection services)
{
services.Configure(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity>()
.AddEntityFrameworkStores();
services.AddScoped>, CustomClaimsPrincipalFactory>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
IdentityExtensions
public static class IdentityExtensions
{
public static int GetUserId(this ClaimsPrincipal identity)
{
Claim claim = identity?.FindFirst(CustomClaimTypes.UserId);
if (claim == null)
return 0;
return int.Parse(claim.Value);
}
public static string GetName(this ClaimsPrincipal identity)
{
Claim claim = identity?.FindFirst(ClaimTypes.Name);
return claim?.Value ?? string.Empty;
}
}
Useage
public IActionResult About()
{
var claims = User.Claims;
var userId = User.GetUserId();
var userName = User.GetName();
ViewData["Message"] = "Your application description page.";
return View();
}