Improve Principal handling for OIDC and resolve Logout issue (caused by AntiForgeryToken)
This commit is contained in:
		| @ -1,4 +1,5 @@ | ||||
| using System; | ||||
| using System.Net; | ||||
| using System.Threading.Tasks; | ||||
| using Microsoft.AspNetCore.Components; | ||||
| using Microsoft.JSInterop; | ||||
| @ -34,24 +35,25 @@ namespace Oqtane.Themes.Controls | ||||
|         { | ||||
|             await UserService.LogoutUserAsync(PageState.User); | ||||
|             await LoggingService.Log(PageState.Alias, PageState.Page.PageId, PageState.ModuleId, PageState.User.UserId, GetType().AssemblyQualifiedName, "Logout", LogFunction.Security, LogLevel.Information, null, "User Logout For Username {Username}", PageState.User.Username); | ||||
|  | ||||
|             PageState.User = null; | ||||
|             bool authorizedtoviewpage = UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, PageState.Page.Permissions); | ||||
|  | ||||
|             var url = PageState.Alias.Path + "/" + PageState.Page.Path; | ||||
|             if (!UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, PageState.Page.Permissions)) | ||||
|             { | ||||
|                 url = PageState.Alias.Path; | ||||
|             }             | ||||
|  | ||||
|             if (PageState.Runtime == Shared.Runtime.Server) | ||||
|             { | ||||
|                 // server-side Blazor needs to post to the Logout page | ||||
|                 var fields = new { __RequestVerificationToken = SiteState.AntiForgeryToken, returnurl = !authorizedtoviewpage ? PageState.Alias.Path : PageState.Alias.Path + "/" + PageState.Page.Path }; | ||||
|                 string url = Utilities.TenantUrl(PageState.Alias, "/pages/logout/"); | ||||
|                 var interop = new Interop(jsRuntime); | ||||
|                 await interop.SubmitForm(url, fields); | ||||
|                 // server-side Blazor needs to redirect to the Logout page | ||||
|                 NavigationManager.NavigateTo(Utilities.TenantUrl(PageState.Alias, "/pages/logout/") + "?returnurl=" + WebUtility.UrlEncode(url), true); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 // client-side Blazor | ||||
|                 var authstateprovider = (IdentityAuthenticationStateProvider)ServiceProvider.GetService(typeof(IdentityAuthenticationStateProvider)); | ||||
|                 authstateprovider.NotifyAuthenticationChanged(); | ||||
|                 NavigationManager.NavigateTo(NavigateUrl(!authorizedtoviewpage ? PageState.Alias.Path : PageState.Page.Path, true)); | ||||
|                 NavigationManager.NavigateTo(NavigateUrl(url, true)); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Shaun Walker
					Shaun Walker