protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            if (!string.IsNullOrEmpty(Request["error"]) &&
                !string.IsNullOrEmpty(Request["error_description"]))
            {
                // AADB2C90091: The user has cancelled entering self-asserted information.
                // User clicked on Cancel when resetting the password => Redirect to the original page
                if (Request["error_description"]?.IndexOf("AADB2C90091") > -1)
                {
                    if (!string.IsNullOrEmpty(Request["state"]))
                    {
                        var state = new State(Request["state"]);
                        if (!string.IsNullOrEmpty(state.RedirectUrl))
                        {
                            Response.Redirect(state.RedirectUrl, true);
                        }
                    }
                }
                else
                {
                    var errorMessage = Localization.GetString("LoginError", LocalResourceFile);
                    errorMessage = string.Format(errorMessage, Request["error"], Request["error_description"]);
                    _logger.Error(errorMessage);
                    UI.Skins.Skin.AddModuleMessage(this, errorMessage, ModuleMessage.ModuleMessageType.RedError);
                }
            }
            else
            {
                var identityProvider = UserInfo.Profile.ProfileProperties.GetByName("IdentitySource");
                if (identityProvider != null && identityProvider.PropertyValue == "Azure-B2C")
                {
                    var oauthClient = new AzureClient(PortalId, AuthMode.Login);

                    // Is returning after editing the user profile?
                    var state = new State(Request["state"]);
                    if (Request.UrlReferrer?.Host == oauthClient.LogoutEndpoint.Host &&
                        !string.IsNullOrEmpty(Request["state"]) &&
                        state.Service == oauthClient.Service &&
                        !string.IsNullOrEmpty(state.RedirectUrl) &&
                        oauthClient.HaveVerificationCode())
                    {
                        oauthClient.Policy = AzureClient.PolicyEnum.ProfilePolicy;
                        AuthorisationResult result = oauthClient.Authorize();
                        if (result != AuthorisationResult.Denied)
                        {
                            oauthClient.UpdateUserProfile();
                            Response.Redirect(state.RedirectUrl);
                        }
                    }
                    else
                    {
                        oauthClient.NavigateUserProfile(Request.UrlReferrer);
                    }
                }
            }
        }
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            if (!string.IsNullOrEmpty(Request["error"]) &&
                !string.IsNullOrEmpty(Request["error_description"]))
            {
                // AADB2C90091: The user has cancelled entering self-asserted information.
                // User clicked on Cancel when resetting the password => Redirect to the original page
                if (Request["error_description"]?.IndexOf("AADB2C90091") > -1)
                {
                    var url = Request["state"].Split('-');
                    if (url.Length > 1)
                    {
                        Response.Redirect(url[1], true);
                    }
                }
                else
                {
                    var errorMessage = Localization.GetString("LoginError", LocalResourceFile);
                    errorMessage = string.Format(errorMessage, Request["error"], Request["error_description"]);
                    _logger.Error(errorMessage);
                    UI.Skins.Skin.AddModuleMessage(this, errorMessage, ModuleMessage.ModuleMessageType.RedError);
                }
            }
            else
            {
                if (UserInfo != null && UserInfo.Username.ToLowerInvariant().StartsWith("azureb2c-"))
                {
                    var oauthClient = new AzureClient(PortalId, AuthMode.Login);
                    // Is returning after editing the user profile?
                    if (Request.UrlReferrer?.Host == oauthClient.LogoutEndpoint.Host &&
                        !string.IsNullOrEmpty(Request["state"]) &&
                        Request["state"].StartsWith(oauthClient.Service) &&
                        Request["state"].Length > oauthClient.Service.Length &&
                        oauthClient.HaveVerificationCode())
                    {
                        oauthClient.Policy = AzureClient.PolicyEnum.ProfilePolicy;
                        AuthorisationResult result = oauthClient.Authorize();
                        if (result != AuthorisationResult.Denied)
                        {
                            oauthClient.UpdateUserProfile();
                            var url = Request["state"].Split('-');
                            if (url.Length > 1)
                            {
                                Response.Redirect(url[1]);
                            }
                        }
                    }
                    else
                    {
                        oauthClient.NavigateUserProfile(Request.UrlReferrer);
                    }
                }
            }
        }
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            if (!string.IsNullOrEmpty(Request["error"]) &&
                !string.IsNullOrEmpty(Request["error_description"]))
            {
                // AADB2C90091: The user has cancelled entering self-asserted information.
                // User clicked on Cancel when resetting the password => Redirect to the original page
                if (Request["error_description"]?.IndexOf("AADB2C90091") > -1)
                {
                    if (!string.IsNullOrEmpty(Request["state"]))
                    {
                        var state = new State(Request["state"]);
                        if (!string.IsNullOrEmpty(state.RedirectUrl))
                        {
                            Response.Redirect(state.RedirectUrl, true);
                        }
                        else
                        {
                            Response.Redirect("/", true);
                        }
                    }
                    else
                    {
                        Response.Redirect("/", true);
                    }
                }
                else
                {
                    var errorMessage = Localization.GetString("LoginError", LocalResourceFile);
                    errorMessage = string.Format(errorMessage, Request["error"], Request["error_description"]);
                    _logger.Error(errorMessage);
                    UI.Skins.Skin.AddModuleMessage(this, errorMessage, ModuleMessage.ModuleMessageType.RedError);
                }
            }
            else
            {
                var identityProvider = UserInfo.Profile.ProfileProperties.GetByName("IdentitySource");
                if (identityProvider != null && identityProvider.PropertyValue == "Azure-B2C")
                {
                    var oauthClient = new AzureClient(PortalId, AuthMode.Login);
                    if (HttpContext.Current.Request.Cookies.AllKeys.Contains("AzureB2CUserToken"))
                    {
                        // Logout on B2C to clear the cached B2C login. This will redirect back to here after the logout
                        oauthClient.Logout();
                        return;
                    }

                    // Is returning after running the impersonation on B2C?
                    var state = new State(Request["state"]);
                    if (Request.UrlReferrer?.Host == oauthClient.LogoutEndpoint.Host &&
                        !string.IsNullOrEmpty(Request["state"]) &&
                        state.Service == oauthClient.Service &&
                        !string.IsNullOrEmpty(state.RedirectUrl) &&
                        oauthClient.HaveVerificationCode())
                    {
                        oauthClient.Policy = AzureClient.PolicyEnum.ImpersonatePolicy;
                        AuthorisationResult result = oauthClient.Authorize();
                        if (result != AuthorisationResult.Denied)
                        {
                            if (User != null)
                            {
                                var url = oauthClient.Impersonate();
                                if (string.IsNullOrEmpty(url))
                                {
                                    Response.Redirect($"{Request.Url.Scheme}://{PortalSettings.PortalAlias.HTTPAlias}"); //  Redirect to homepage after impersonation
                                }
                                else
                                {
                                    Response.Redirect(url);
                                }
                            }
                        }
                    }
                    else
                    {
                        var uri = oauthClient.NavigateImpersonation(Request.UrlReferrer, UserInfo.Email);
                        Response.Redirect(uri.ToString(), false);
                    }
                }
            }
        }