В AuthController
при аутентификации я создаю несколько утверждений - UserID
является одним из них.
...
Subject = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, user.UserName),
new Claim("UserID", user.Id.ToString()),
})
Когда приложение Angular отправляет запрос, я могу получить UserID
на другом контроллере
Claim claimUserId = User.Claims.SingleOrDefault(c => c.Type == "UserID");
Экземпляр ControllerBase.User
содержит объект .Identity
, который в свою очередь содержит коллекцию Claims
.
Если я попытаюсь вызвать пользователя следующим образом:
var user = await UserManager.GetUserAsync(HttpContext.User)
user
является null
.
Возможно, я забыл добавить дополнительную заявку?
Или, может быть, как только я использую JWT - я должен переопределить функциональность UserManager
по умолчанию, чтобы он выбирал пользователя по claim
, который содержит UserID
?
Или, может быть, есть лучший подход?
Дополнительная информация:
Identity
зарегистрирован следующим образом
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<AppDbContext>()
.AddDefaultTokenProviders();
ApplicationUser.Id
поле имеет bigint
(или в C # long
) тип
Кроме того, я создаю пользователей в EF Seed Data
с помощью UserManager, который разрешается с помощью ServiceProvider
_userManager = scope.ServiceProvider.GetService<UserManager<ApplicationUser>>();
...
adminUser.PasswordHash = new PasswordHasher<ApplicationUser>().HashPassword(adminUser, "123qwe");
_userManager.CreateAsync(adminUser);