Asp.Net Core 2.2 Идентификация личности - PullRequest
0 голосов
/ 02 июня 2019

У меня странная ситуация в моем веб-приложении, из-за которой я могу успешно войти в систему, но не аутентифицироваться. Я проверил свойство: User.Identity.IsAuthenticated свойство и его значение равно false. Я использую контроллер учетной записи по умолчанию

var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: true);

Я поставил точку останова, и значение результата равно Success, но User.Identity.IsAuthenticated имеет значение false.

Ниже приведен мой код для метода ConfigureServices в классе запуска:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<SchoolIdentityContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("IdentityConnection")));

        services.AddIdentity<User, IdentityRole>()
            .AddEntityFrameworkStores<SchoolIdentityContext>()
            .AddDefaultTokenProviders();

        services.ConfigureApplicationCookie(options =>
        {
            // Cookie settings
            options.Cookie.HttpOnly = true;
            options.ExpireTimeSpan = TimeSpan.FromMinutes(5);
            options.LoginPath = "/Account/Signin";
            options.LogoutPath = "/Account/Signout";
            options.AccessDeniedPath = "/Account/AccessDenied";
            options.SlidingExpiration = true;
        });

        services.AddScoped(typeof(IAppLogger<>), typeof(LoggerAdapter<>));
        services.AddScoped<IBookCategoryService, BookCategoryService>();
        services.AddScoped<IBookService, BookService>();

        services.AddHttpClient("chikoroapi", c => 
        {
            c.BaseAddress = new Uri("http://localhost:5100/api");
        });

        services.Configure<IdentityOptions>(options =>
        {
            // Password settings.
            options.Password.RequireDigit = true;
            options.Password.RequireLowercase = true;
            options.Password.RequireNonAlphanumeric = true;
            options.Password.RequireUppercase = true;
            options.Password.RequiredLength = 8;
            options.Password.RequiredUniqueChars = 1;

            // Lockout settings.
            options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
            options.Lockout.MaxFailedAccessAttempts = 3;
            options.Lockout.AllowedForNewUsers = true;

            // User settings.
            options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
            options.User.RequireUniqueEmail = true;
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        _services = services;
    }

И способ настройки, как показано ниже

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            ListAllRegisteredServices(app);
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            //app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();
        app.UseAuthentication();
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

Я несколько раз перепроверял документацию и не могу понять, что мне не хватает.

1 Ответ

0 голосов
/ 03 июня 2019

SignIn сохраняет данную информацию для будущих запросов, он не устанавливает HttpContext.User на текущий.

Вы можете получить User.Identity.IsAuthenticated только для последующего запроса на вход в систему.

См. https://github.com/aspnet/Security/issues/1318

...