public override async Task Invoke(IOwinContext context)
        {
            var shortCircuit = false;

            if (!context.Request.Uri.IsClientSideRequest())
            {
                // check if we have any errors registered
                var errors = context.GetExternalLoginProviderErrors();
                if (errors != null)
                {
                    shortCircuit = true;

                    var serialized = Convert.ToBase64String(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(errors)));

                    context.Response.Cookies.Append(ViewDataExtensions.TokenExternalSignInError, serialized, new CookieOptions
                    {
                        Expires  = DateTime.Now.AddMinutes(5),
                        HttpOnly = true,
                        Secure   = context.Request.IsSecure
                    });

                    context.Response.Redirect(context.Request.Uri.ToString());
                }
            }

            if (Next != null && !shortCircuit)
            {
                await Next.Invoke(context);
            }
        }