当用户从Blazor OIDC客户端注销时,由于浏览器在HTTP Cookie中保留了登录会话信息,因此需要手动清除浏览器中的Cookie来彻底注销用户。以下是解决此问题的步骤:
1.在Blazor客户端中,添加注销按钮并调用以下代码来清除Cookie:
@inject NavigationManager NavigationManager
@code {
private async Task Logout()
{
await ((RemoteAuthenticationService)AuthenticationService).SignOutAsync();
NavigationManager.NavigateTo("/");
await jsRuntime.InvokeVoidAsync("blazorExtensions.DeleteCookie", "auth");
}
}
请注意,上面的代码使用了blazorExtensions.DeleteCookie JavaScript函数来从浏览器中删除名为“auth”的Cookie。
2.在Blazor Server端的Startup.cs文件中,AddCookieAuthentication方法添加未过期的Cookie的滑动过期时间。这将确保Cookie在清除Cookie时立即过期。
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
options.SlidingExpiration = true;
});
完成了这些步骤后,当用户注销时,浏览器中的Cookie将立即过期并被删除,用户将彻底注销。
∠