Исключение нулевого указателя User.Identity с угловым шаблоном визуальной студии SPA (Angular)

Я использую угловой шаблон Visual Studio для создания проекта, пытаясь получить доступ к утверждениям пользователя User.Identity.Name. Поскольку пользователь имеет значение NULL, возникает исключение с нулевым указателем.

Я выполнил инструкции отсюда https://docs.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).Result;
                
            }
        }

Пользователь является пустым после успешного входа в систему с сервера идентификации. Базовый контроллер украшен [Authorize] Точка останова работает после авторизации

введите описание изображения здесь


person San Jaisy    schedule 27.09.2020    source источник


Ответы (1)


Нулевым является не пользователь, а нулевой HttpContext.

HttpContext вызывается в конструкторе, а затем еще не создан экземпляр HttpContext, поскольку это происходит, когда клиент подключается к этому контроллеру. Переместите свой код внутрь метода в контроллере, и вы обнаружите, что HttpContext установлен.

person Thomas    schedule 27.09.2020