Почему мой ASP .NetCore Identity Authentication cook ie не держит меня в системе? - PullRequest
0 голосов
/ 19 марта 2020

Я новичок в AspNetCore, его промежуточном программном обеспечении и Identity. Я создаю очень простой веб-сайт, где пользователь входит в систему, и ему разрешено установить обычный флажок Запомнить меня и оставаться в системе. Функция Запомнить меня не работает, и через 10-15 минут я перенаправлен на страницу входа. снова. Я вижу повара ie в браузере, и его срок годности действительно тот, который я установил: 30 дней в будущем. Мой код ниже. Я чувствую, что что-то упустил, но я не знаю, что.

Мой класс Startup.cs:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
    }

    app.UseStaticFiles();

    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}").RequireAuthorization();

        endpoints.MapRazorPages();
    });
}

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContextPool<ApplicationDbContext>(options => 
                                 options.UseSqlServer(Configuration.GetConnectionString("xxxx")));

    services.AddIdentity<IdentityUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();

    services.ConfigureApplicationCookie(options =>
    {
        options.Cookie.HttpOnly = true;
        options.ExpireTimeSpan = TimeSpan.FromDays(30);
        options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
        options.SlidingExpiration = true;
        options.LoginPath = "/account/login";
        options.LogoutPath = "/account/logout";
        options.AccessDeniedPath = "/account/accessdenied";
    });

    services.AddControllersWithViews();

    services.AddRazorPages();
}

Метод входа в систему AccountController:

[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> Login(LoginModel model)
{
    if (ModelState.IsValid)
    {
        var result = await _signInManager.PasswordSignInAsync(model.EmailAddress, model.Password, 
                                                              model.RememberMe, false);

        if (result.Succeeded)
            return RedirectToAction("index", "links");

        ModelState.AddModelError(string.Empty, "Invalid login");
    }

        return View(model);
}

Мои куки в браузере enter image description here

1 Ответ

0 голосов
/ 01 апреля 2020

После пары недель поиска в Google я наконец нашел исправление в этой записи . Вы должны настроить защиту данных, чтобы логины сохранялись. Это решение также позволяет пользователям входить в систему после развертываний и перезапусков IIS.

Я добавил машинный ключ в файл web.config, как предложено в в этом сообщении , а затем добавил защиту данных в метод ConfigureServices. ..

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
            // This helps surviving a restart: a same app will find back its keys. Just ensure to create the folder.
            .PersistKeysToFileSystem(new DirectoryInfo("\\MyFolder\\keys\\"))
            // This helps surviving a site update: each app has its own store, building the site creates a new app
            .SetApplicationName("MyWebsite")
            .SetDefaultKeyLifetime(TimeSpan.FromDays(90));
}

Подробнее здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...