Adding custom claim not working in asp.net core identity

后端 未结 1 910
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-01-07 01:19

I have created CustomClaimType to store user id:

public static class CustomClaimTypes
{
    public const string UserId = \"UserId\         


        
1条回答
  •  感动是毒
    2021-01-07 01:47

    For adding extra claims to Identity, you could implement custom CustomClaimsPrincipalFactory.

    1. 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;
          }
      }
      
    2. 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);
      }
      
    3. 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;
          }
      }
      
    4. Useage

      public IActionResult About()
      {
          var claims = User.Claims;
          var userId = User.GetUserId();
          var userName = User.GetName();
          ViewData["Message"] = "Your application description page.";
      
          return View();
      }
      

    0 讨论(0)
提交回复
热议问题