Получить cookie в событии OnTicketReceived после входа в систему - PullRequest
0 голосов
/ 26 октября 2018

Мое приложение ASP.NET Core использует OpenID Connect для входа в систему пользователя. После того, как пользователь вошел в систему, я хочу получить файл cookie, который был установлен до входа в систему. Прямо сейчас я использую событие OnTicketReceived промежуточного программного обеспечения OIDC. Чтобы получить доступ к HttpContext, я использую вспомогательный класс, который использует объект IHttpContextAccessor. Проблема в том, что переменная myCookie остается нулевой. Как я могу получить значение cookie после входа в систему?

Startup.cs:

public void ConfigureServices(IServiceCollection services)
    {
        ...            
        services.AddAuthentication(options =>
        {
            ...
        })
        .AddOpenIdConnect("oidc", options =>
        {
            ...
            options.Events = new OpenIdConnectEvents
            {
                OnTicketReceived = e =>
                {
                    if (e.Principal.Identity.IsAuthenticated)
                    {
                            string myCookie = HttpHelper.HttpContext.Request.Cookies[Constants.MY_COOKIE];
                    }
                }
            };
        });
    }


public static class HttpHelper
{
    private static IHttpContextAccessor accessor;
    public static void Configure(IHttpContextAccessor httpContextAccessor)
    {
        accessor = httpContextAccessor;
    }

    public static HttpContext HttpContext => accessor.HttpContext;
}

1 Ответ

0 голосов
/ 26 октября 2018

HttpContext доступен для параметра, поэтому вспомогательный класс не нужен.

options.Events = new OpenIdConnectEvents
{
    OnTicketReceived = async e =>
    {
        if (e.Principal.Identity.IsAuthenticated)
        {
            string myCookie = e.HttpContext.Request.Cookies[Constants.MY_COOKIE];
        }
    }
};

Вы также можете получить доступ к другим услугам через параметр через var service = e.HttpContext.RequestServices.GetRequiredService<IWhateverService>();

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