Внедрение зависимостей внутри JwtBearerEvents - PullRequest
0 голосов
/ 30 октября 2019

Я использую токены JWT в своем API. Чтобы заставить это работать, в моем классе ConfigureServices я звоню services.AddAuthentication(...), а затем AddJwtBearer(...).

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(options =>
    {
        //...
    })
    .AddJwtBearer(o =>
    {
        ...

        o.Events = new JwtBearerEvents
        {
            OnAuthenticationFailed = context =>
            {
                //...

                //Log error <<<< how do I use dependency injected logger here?
            }
        };
    });
}

Я хочу записать запись в журнал, когда происходит событие OnAuthenticationFailed. Тем не менее, я должен был бы получить объект регистратора из ServiceProvider. И это еще не доступно в методе ConfigureServices.

С другой стороны, когда обработчик событий OnAuthenticationFailed действительно выполняется (если вообще когда-либо), будет доступен ServiceProvider.

Как мне получить доступ к ServiceProvider внутри обработчика OnAuthenticationFailed?

1 Ответ

1 голос
/ 30 октября 2019

Вы можете попробовать что-то вроде:

OnAuthenticationFailed = context =>
{

    if (context.Exception.GetType() == typeof(SecurityTokenExpiredException))
    {
        var loggerFactory = context.HttpContext.RequestServices
                            .GetRequiredService<ILoggerFactory>();
        var logger = loggerFactory.CreateLogger("Startup");
        logger.LogInformation("Token-Expired");

    }
    return System.Threading.Tasks.Task.CompletedTask;
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...