47 lines
2.0 KiB
Plaintext
47 lines
2.0 KiB
Plaintext
@page "/logout"
|
||
@inject IAuthenticationClientService AuthenticationClientService
|
||
@inject NavigationManager NavigationManager
|
||
|
||
<MudText>HELLO WORLD </MudText>
|
||
|
||
@code {
|
||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||
{
|
||
// 作用:这个方法在组件渲染到 UI 后被调用。
|
||
// 意义:这是执行 JS 互操作的安全时机,特别是在启用了预渲染的情况下,
|
||
// 此时客户端的 JS 运行时已经可用(在 Blazor Server 中通过 SignalR,在 Blazor WASM 中是 WASM 环境本身)。
|
||
// firstRender 参数:
|
||
// 作用:指示本次调用是否是组件首次在客户端渲染完成。
|
||
// 意义:注销逻辑只需要执行一次。使用 firstRender = true 可以避免在组件后续状态变化触发重新渲染时重复执行。
|
||
|
||
if (firstRender)
|
||
{
|
||
Console.WriteLine("Signout: OnAfterRenderAsync - First Render. Executing Logout..."); // 可选日志
|
||
|
||
try
|
||
{
|
||
// === 在这里安全地调用依赖 JS Interop 的注销方法 ===
|
||
// AuthenticationClientService.Logout() 方法内部会调用 _localStorageService.RemoveItemAsync(),
|
||
// 现在是调用它的安全时机。
|
||
|
||
|
||
// 注销完成后,执行导航重定向
|
||
NavigationManager.NavigateTo("/");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
// === 处理 Logout 中可能发生的异常 ===
|
||
// 例如,如果 Local Storage 操作失败,或者 Logout 方法内部有其他错误
|
||
Console.WriteLine($"Error during logout in Signout component: {ex.Message}");
|
||
// 你可能需要在这里显示错误信息给用户,或者决定是否依然重定向
|
||
// 即使注销失败,通常也希望将用户导航到某个页面(如首页或错误页)
|
||
// 例如:
|
||
NavigationManager.NavigateTo("/"); // 即使失败也重定向到首页
|
||
// 或者 NavigationManager.NavigateTo("/error"); // 重定向到错误页
|
||
}
|
||
Console.WriteLine("Signout: OnAfterRenderAsync - First Render. Logout execution finished."); // 可选日志
|
||
}
|
||
}
|
||
|
||
|
||
} |