|
|
|
@ -3,6 +3,7 @@ using System.Globalization;
|
|
|
|
|
using System.Net;
|
|
|
|
|
using System.Text.Encodings.Web;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using Microsoft.AspNetCore.Authentication;
|
|
|
|
|
using Microsoft.AspNetCore.Http;
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
using Microsoft.Extensions.Options;
|
|
|
|
@ -27,13 +28,30 @@ public class AbpAspNetCoreMultiTenancyOptions
|
|
|
|
|
TenantKey = TenantResolverConsts.DefaultTenantKey;
|
|
|
|
|
MultiTenancyMiddlewareErrorPageBuilder = async (context, exception) =>
|
|
|
|
|
{
|
|
|
|
|
// Try to delete the tenant's cookie if it does not exist or is inactive.
|
|
|
|
|
var tenantResolveResult = context.RequestServices.GetRequiredService<ITenantResolveResultAccessor>().Result;
|
|
|
|
|
if (tenantResolveResult != null &&
|
|
|
|
|
tenantResolveResult.AppliedResolvers.Contains(CookieTenantResolveContributor.ContributorName))
|
|
|
|
|
if (tenantResolveResult != null)
|
|
|
|
|
{
|
|
|
|
|
if (tenantResolveResult.AppliedResolvers.Count == 1 && tenantResolveResult.AppliedResolvers.Contains(CurrentUserTenantResolveContributor.ContributorName))
|
|
|
|
|
{
|
|
|
|
|
var authenticationType = context.User.Identity?.AuthenticationType;
|
|
|
|
|
if (authenticationType != null)
|
|
|
|
|
{
|
|
|
|
|
var scheme = await context.RequestServices.GetRequiredService<IAuthenticationHandlerProvider>().GetHandlerAsync(context, authenticationType);
|
|
|
|
|
if (scheme is IAuthenticationSignOutHandler signOutHandler)
|
|
|
|
|
{
|
|
|
|
|
// Try to delete the authentication's cookie if it does not exist or is inactive.
|
|
|
|
|
await signOutHandler.SignOutAsync(null);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var options = context.RequestServices.GetRequiredService<IOptions<AbpAspNetCoreMultiTenancyOptions>>().Value;
|
|
|
|
|
AbpMultiTenancyCookieHelper.SetTenantCookie(context, null, options.TenantKey);
|
|
|
|
|
if (tenantResolveResult.AppliedResolvers.Contains(CookieTenantResolveContributor.ContributorName) ||
|
|
|
|
|
context.Request.Cookies.ContainsKey(options.TenantKey))
|
|
|
|
|
{
|
|
|
|
|
// Try to delete the tenant's cookie if it does not exist or is inactive.
|
|
|
|
|
AbpMultiTenancyCookieHelper.SetTenantCookie(context, null, options.TenantKey);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
context.Response.Headers.Add("Abp-Tenant-Resolve-Error", exception.Message);
|
|
|
|
|