src/JetBrains.Space.Samples.Web/SpaceAuthenticationExceptionErrorFilter.cs (33 lines of code) (raw):

using JetBrains.Annotations; using JetBrains.Space.Common; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Mvc.Filters; namespace JetBrains.Space.Samples.Web; [UsedImplicitly] public class SpaceAuthenticationExceptionErrorFilter : IAsyncExceptionFilter { private readonly ILogger<SpaceAuthenticationExceptionErrorFilter> _logger; public SpaceAuthenticationExceptionErrorFilter( ILogger<SpaceAuthenticationExceptionErrorFilter> logger) { _logger = logger; } public async Task OnExceptionAsync(ExceptionContext context) { if (context.Exception is AuthenticationRequiredException) { // Space authentication required - handle login await HandleException(context); } else if (context.Exception is PermissionDeniedException) { // Space extra permissions required - handle login _logger.LogCritical(context.Exception, "Extra permissions are required in Space"); await HandleException(context); } } private async Task HandleException(ExceptionContext context) { await context.HttpContext.SignOutAsync(); await context.HttpContext.ChallengeAsync(); context.ExceptionHandled = true; } }