сервер идентификации проверяет, вошел ли пользователь в систему, всегда возвращать false - PullRequest
0 голосов
/ 03 августа 2020

У меня есть проект SPA с. net core 3.1 и сервером идентификации и я реагирую. Когда я хочу проверить, что пользователь вошел в систему, он всегда возвращает false

 if (SignInManager.IsSignedIn(User)) //always return false
{
}

или

 if (User.Identity.IsAuthenticated) //always return false
{
}

, но это работает, когда мы вызываем контроллер с атрибутом [Authorize], мы перенаправляемся, выполняем вход, и все в порядке

Startup.cs:

           public void ConfigureServices(IServiceCollection services)
                {
                    services.AddDbContext<ApplicationDbContext>(options =>
                        options.UseSqlServer(
                            Configuration.GetConnectionString("DefaultConnection")));
        
                    services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>()
                        .AddEntityFrameworkStores<ApplicationDbContext>();
        
                    var builder = services.AddIdentityServer()
                        .AddApiAuthorization<IdentityUser, ApplicationDbContext>();
    
                    builder.Services.ConfigureExternalCookie(options => {
                        options.Cookie.IsEssential = true;
                        options.Cookie.SameSite = (SameSiteMode.Unspecified); 
                    });
        
                    builder.Services.ConfigureApplicationCookie(options => {
                        options.Cookie.IsEssential = true;
                        options.Cookie.SameSite = (SameSiteMode.Unspecified); 
                    });
        
                    services.AddAuthentication()
                        .AddIdentityServerJwt();
        
                    services.AddControllersWithViews();
                    services.AddRazorPages();
                    services.AddMvc().AddNewtonsoftJson(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
        
                  
                    services.AddSpaStaticFiles(configuration =>
                    {
                        configuration.RootPath = "ClientApp/build";
                    });
    }

  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

            app.UseStaticFiles();
            app.UseSpaStaticFiles();

            app.UseRouting();

            app.UseAuthentication();
            app.UseIdentityServer();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller}/{action=Index}/{id?}");
                endpoints.MapControllerRoute("adminArea", "{area=Admin}/{controller=Dashboard}/{action=Index}/{id?}");
                endpoints.MapRazorPages();
            });

            app.UseSpa(spa =>
            {
                spa.Options.SourcePath = "ClientApp";

                if (env.IsDevelopment())
                {
                    spa.UseReactDevelopmentServer(npmScript: "start");
                }
            });
        }

appsettings. json:

  "IdentityServer": {
    "Clients": {
      "AlmasReact": {
        "Profile": "IdentityServerSPA"
      }
    }

Как проверить, авторизован ли пользователь?

...