#c_sharp #aspnet_core #razor #aspnet_identity_2 #aspnet_identity_3
@User.Identity.Name по сути выдает логин. А как получить тот же Age к примеру? public class User : IdentityUser { public int Age{ get; set; } public string FIO { get; set; } public string Addresses { get; set; } }
Ответы
Ответ 1
По умолчанию используются только Name. Класс SignInManager регистрирует пользователей в вашем приложении. Этот класс использует IUserClaimsPrincipalFactoryдля регистрации claim'ов. Чтобы добавить claim нужно реализовать свой IUserClaimsPrincipalFactory public class AppClaimsPrincipalFactory : UserClaimsPrincipalFactory { public AppClaimsPrincipalFactory( UserManager userManager , RoleManager roleManager , IOptions optionsAccessor) : base(userManager, roleManager, optionsAccessor) { } public async override Task CreateAsync(ApplicationUser user) { var principal = await base.CreateAsync(user); if (user.Age > 0) { ((ClaimsIdentity)principal.Identity).AddClaims(new[] { new Claim("age", user.Age.ToString()) }); } return principal; } } Далее регистрируем в классе Startup в методе ConfigureServices после добавления Identity. public void ConfigureServices(IServiceCollection services) { services.AddDbContext (options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddIdentity () .AddEntityFrameworkStores () .AddDefaultTokenProviders(); services.AddScoped , AppClaimsPrincipalFactory>(); ... } В представлении значение Age можно получить так: @User.Claims.Where(c => c.Type == "age").Select(c => c.Value).SingleOrDefault(); Для удобства можно создать метод расширения: public static class IdentityExtensions { public static string GetAge(this IIdentity identity) { var claim = ((ClaimsIdentity)identity).FindFirst("age"); return (claim != null) ? claim.Value : string.Empty; } } И использовать в представлении так: @User.Identity.GetAge();
Комментариев нет:
Отправить комментарий