#c# #asp.net #asp.net-core #asp.net-identity #visual-studio-templates
#c# #asp.net #asp.net-ядро #asp.net-identity #visual-studio-templates
Вопрос:
Я использую шаблон Visual studio angular для создания проекта, пытаясь получить доступ к утверждениям пользователя User.Identity.Name
. Поскольку пользователь имеет значение null, поэтому возникает исключение нулевого указателя.
Я следовал инструкциям отсюда https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity-api-authorization?view=aspnetcore-3.1
который использует AddApiAuthorization, AddIdentityServerJwt, OidcConfigurationController
Startup.cs
services.AddIdentityServer()
.AddApiAuthorization<ApplicationUser, ApplicationDbContext>()
.AddProfileService<ProfileService>();
services.AddAuthentication()
.AddIdentityServerJwt();
app.UseAuthentication();
app.UseIdentityServer();
app.UseAuthorization();
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
В базовом контроллере я пытаюсь получить доступ к утверждению пользователя
[Authorize]
public abstract class BaseController : ControllerBase
{
private readonly UserManager<ApplicationUser> _userManager;
public BaseController()
{
var identity = HttpContext.User.Identity as ClaimsIdentity;
var user = _userManager.FindByNameAsync(User.Identity.Name).Resu<
}
}
Пользователь имеет значение null после успешного входа с сервера идентификации. Базовый контроллер, украшенный [Authorize]
точкой останова, работает после авторизации
Ответ №1:
Значение null не у пользователя, а у HttpContext.
В конструкторе вызывается HttpContext, а затем экземпляр HttpContext еще не создан, поскольку это происходит, когда клиент подключается к этому контроллеру. Переместите свой код внутри метода в контроллере, и вы обнаружите, что установлен HttpContext .