Blazor - 如何在成功登录后调用方法来设置用户数据

Blazor - How to call method to set user data after successful log in

我有一个托管的 Blazor WebAssembly 应用程序,我强制用户在启动时登录。我已将此逻辑放在 MainLayout.razor 页面中,如下所示:

protected override async Task OnInitializedAsync()
    {
        var user = (await AuthenticationStateTask).User;
        if (user.Identity.IsAuthenticated)
        {
            await SetUserInfo(user);
        }
        else
        {
            AuthMessage = "User is NOT authenticated";
            NavigationManager.NavigateTo($"authentication/login?returnUrl={Uri.EscapeDataString(NavigationManager.Uri)}");
        }
    }

我想做的是在用户登录成功后调用SetUserInfo方法(此时启动应用程序总是导航到登录页面),但不知道该怎么做它。 OnInitializedAsync 方法似乎只运行一次,除非您手动刷新页面。有任何想法吗?提前致谢。

使用 OnAfterRenderAsync

 protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            var authenticationState = await authenticationStateTask;
            if (authenticationState.User.Identity.IsAuthenticated)
            {
            
            }
        }
    }

在 LoginDisplay 组件上

@code {
    [CascadingParameter]
    private Task<AuthenticationState> authenticationStateTask { get; set; }

    private string _authMessage;

    private async Task LogUsername()
    {
        var authState = await authenticationStateTask;
        var user = authState.User;

        if (user.Identity.IsAuthenticated)
        {
            _authMessage = $"{user.Identity.Name} is authenticated.";
            wait SetUserInfo(user);
        }
       
    }
}

想通了。需要在组件中使用OnParametersSetAsync()。

[CascadingParameter] protected Task<AuthenticationState> AuthenticationStateTask { get; set; }

protected override async Task OnParametersSetAsync()
        {
            var user = (await AuthenticationStateTask).User;
            if (user.Identity.IsAuthenticated)
            {
                await SetUserInfo(user);                
            }
        }