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);
}
}
我有一个托管的 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);
}
}