首页 > 解决方案 > 登录后在 OnTicketReceived 事件中检索 cookie

问题描述

我的 ASP.NET Core 应用程序使用 OpenID Connect 登录用户。用户登录后,我想检索登录前设置的 cookie。现在,我正在使用 OIDC 中间件的 OnTicketReceived 事件。为了访问 HttpContext,我使用了一个使用 IHttpContextAccessor 对象的辅助类。问题是 myCookie 变量仍然为空。登录后如何检索 cookie 值?

启动.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;
}

标签: c#asp.net-core

解决方案


HttpContext 在参数上可用,因此不需要辅助类。

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

也可以通过参数via访问其他服务var service = e.HttpContext.RequestServices.GetRequiredService<IWhateverService>();


推荐阅读