Я потратил много часов на это сейчас, но безрезультатно, я хочу, чтобы пользователь имел возможность настраивать параметры CookieAuthenticationOptions из приложения. В большинстве приведенных примеров только устанавливаются параметры в настройках служб при запуске, но это бесполезно, поскольку параметры жестко запрограммированы.
Проблема, с которой я столкнулся, заключается в поиске решения, которое позволяет настраивать эти параметры при использовании встроенные функции идентификации, если приложение использует аутентификацию cook ie без идентификации, тогда, вероятно, будет легче разобраться.
Две основные цели:
- Загрузка CookieAuthenticationOptions при запуске из таблицы БД.
- Если параметры изменяются / обновляются в течение времени жизни приложения, куки, которые уже были проблемы, должны быть признаны недействительными / принудительно воссозданы при запросе следующей страницы, поэтому куки теперь имеют обновленные параметры.
Пока моя теория верна или нет чтобы загрузить параметры в методе настройки ниже, однако при входе в систему я проверяю отладчик chrome и обнаруживаю, что такие параметры, как имя cook ie, не установлены, при условии, что приложение просто использует встроенные параметры по умолчанию. Так как же мне достичь поставленных целей? Примечание. Я использую бритвенные страницы и модели страниц для большей части приложения, а также использую встроенную систему идентификации из шаблона учетных записей пользователей MS. Thx
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 Page Страница входа в систему Модель использует стандартный метод входа в систему:
var result = await _signInManager.PasswordSignInAsync(Input.UserName, Input.Password, Input.RememberMe, lockoutOnFailure: true);