Я потратил на это много часов и безрезультатно. Я хочу, чтобы у пользователя была возможность настраивать CookieAuthenticationOptions из приложения. В большинстве приведенных примеров параметры в службах настройки устанавливаются только при запуске, но это бесполезно, поскольку параметры жестко запрограммированы.
Передо мной стоит задача найти решение, которое позволяет настраивать эти параметры при использовании встроенных функций идентификации. Если бы приложение использовало аутентификацию файлов cookie без идентификации, это, вероятно, было бы легче понять.
Две основные цели:
- Загрузите CookieAuthenticationOptions при запуске из таблицы БД.
- Если настройки изменяются / обновляются в течение срока службы приложения, файлы cookie, которые уже были проблемными, должны быть аннулированы / принудительно воссозданы при следующем запросе страницы, чтобы файлы cookie теперь имели обновленные параметры.
До сих пор моя теория верна или неверна - это загрузить параметры в методе настройки ниже, однако, когда я пою, я проверяю отладчик Chrome и обнаруживаю, что такие параметры, как имя файла cookie, не были установлены, предполагая, что приложение просто использует значение по умолчанию встроенные опции. Итак, как я могу достичь поставленных выше целей? Обратите внимание: я использую бритвенные страницы и модели страниц для большей части приложения, а также использую встроенную систему идентификации из шаблона учетных записей пользователей MS. Спасибо
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IOptions<IdentityOptions> identityOptions, IOptions<CookiePolicyOptions> cookiePolicyOptions, IOptions<CookieAuthenticationOptions> cookieOptions)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/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();
// Added to original .net core template.
// Whenever a request is made for a page, serilog is going to log that.
app.UseSerilogRequestLogging();
app.UseRouting();
// Here I am creating a service to access the DB table and pull the options, this does work for other settings in the DB table which i have not included in this example given the focus of the topic is cookies.
using (var scope = app.ApplicationServices.CreateScope())
{
var systemSettings = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>().SystemSetting.FirstOrDefault();
if (systemSettings != null)
{
// Cookie Options
cookieOptions.Value.Cookie.Name = systemSettings.CookieName;
cookieOptions.Value.LoginPath = systemSettings.LoginPath;
// I will add the other parameters once I got the above two working...
}
}
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapHub<DataHub>("/dataHub");
endpoints.MapControllers(); // Added for use with REST API.
});
}
Модель страницы входа в шаблон MS использует стандартный метод входа в систему:
var result = await _signInManager.PasswordSignInAsync(Input.UserName, Input.Password, Input.RememberMe, lockoutOnFailure: true);