Использование внедрения зависимостей для настройки параметров CookieAuthenticationOptions в AspNetCore Mvc - PullRequest
0 голосов
/ 27 мая 2020

Есть ли способ использовать внедрение зависимостей для настройки параметров аутентификации cook ie? Я хотел бы получить некоторые настройки из базы данных, но на данный момент у меня нет доступа к DatabaseContext.

public void ConfigureServices(IServiceCollection services)
{
  ...
  services
            .AddAuthentication(Authentication.scheme)
            .AddCookie(Authentication.scheme, options =>
            {
                options.ExpireTimeSpan = new TimeSpan(30, 0, 0, 0, 0);
                options.Cookie.IsEssential = true;
                options.Cookie.Name = ".AUTH-Cookie";
                options.ReturnUrlParameter = "returnUrl";
                options.LoginPath = "/Security/SignIn";
                options.LogoutPath = "/Security/SignOut";
                options.EventsType = typeof(CookieAuthenticationEvents);
            });
  ...
}

Я могу использовать AddOptions () и Configure () для сделайте это с другими элементами в ConfigureServices, но я не могу понять, как это сделать с помощью CookieAuthenticationOptions ...

services
  .AddOptions<MvcOptions>()
  .Configure<IDisplayMetadataProvider>((options, localizationMetadataProvider) =>
  {
    options.ModelMetadataDetailsProviders.Add(localizationMetadataProvider);
  });

Я пытался сделать то же самое с CookieAuthenticationOptions, но это не отображается работать так же ...

1 Ответ

1 голос
/ 28 мая 2020

Чтобы узнать, как получить данные из базы данных в параметрах аутентификации cook ie, вот простой пример:

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

    var sp = services.BuildServiceProvider();
    var myDbContext = sp.GetService<MyDbContext>();
    var data = GetData(myDbContext);

    services.AddAuthentication(Authentication.scheme)
    .AddCookie(Authentication.scheme,options =>
    {
        options.LoginPath = data;
        //...
    });         
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{        
    //be sure you have added authentication middleware
    app.UseAuthentication();

    //if you use asp.net core 3.x,also need to add this
    //app.UseAuthorization();

}
public static string GetData(MyDbContext _context)
{
    //get the data from database
    var data = _context.Tables.Select(j => j.Loginpath).FirstOrDefault();
    return data;
}
...