Asp.net core Blazor Webassembly身份验证事件
使用Microsoft.AspNetCore.Components.WebAssembly.Authentication对用户进行身份验证时,在ASP.NET Core(最新版本,Blazor)上托管的客户端应用程序上的Blazor WebAssembly应用程序中,何时/如何在每次对用户进行身份验证时调用操作?即使他们返回应用程序并有一个活动会话 更新2020-07-15:Asp.net core Blazor Webassembly身份验证事件,asp.net-core,microsoft-graph-api,msal,blazor-client-side,Asp.net Core,Microsoft Graph Api,Msal,Blazor Client Side,使用Microsoft.AspNetCore.Components.WebAssembly.Authentication对用户进行身份验证时,在ASP.NET Core(最新版本,Blazor)上托管的客户端应用程序上的Blazor WebAssembly应用程序中,何时/如何在每次对用户进行身份验证时调用操作?即使他们返回应用程序并有一个活动会话 更新2020-07-15: 我试图克服的问题是,我们有一个服务,一旦用户登录(MSAL)以获取其信息和配置文件图像,它就会转到Graph API。在
我试图克服的问题是,我们有一个服务,一旦用户登录(MSAL)以获取其信息和配置文件图像,它就会转到Graph API。在他们登录后,我使用RemoteAuthenticatorView.onLoginSucseed事件来了解他们实际登录的时间。问题是,如果他们随后刷新页面(F5),服务将丢失图形信息。我想我实际上想要实现的是持久化会话数据。我完全明白你所说的“每次它们都经过身份验证”是什么意思 如果要对每个事件(如页面加载)执行操作,则可以通过在页面中嵌入AuthorizedView来实现:
<AuthorizeView>
<Authorized>
... do action for authorized users ...
</Authorized>
<NotAuthorized>
... do action for un-authorized users ...
</NotAuthorized>
</AuthorizeView>
为特定的动作创建自定义的RenderFragments可能更好——我想这取决于你想做什么
@page "/authentication/{action}"
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@using Microsoft.AspNetCore.Components.WebAssembly.Hosting
@using System.Text.Json
@using System.Security.Claims
<RemoteAuthenticatorView Action="@Action" />
@inject ILogger<Authentication> logger
@code{
[Parameter]
public string Action { get; set; }
protected override void OnParametersSet()
{
base.OnParametersSet();
logger.LogInformation($"Action: {Action}");
//
// DO YOUR ACTION HERE
//
}
}
@page”/authentication/{action}
@使用Microsoft.AspNetCore.Components.WebAssembly.Authentication
@使用Microsoft.AspNetCore.Components.WebAssembly.Hosting
@使用System.Text.Json
@使用System.Security.Claims
@ILogger记录器
@代码{
[参数]
公共字符串操作{get;set;}
受保护的覆盖无效OnParametersSet()
{
base.OnParametersSet();
logger.LogInformation($“Action:{Action}”);
//
//你在这里做什么
//
}
}
为了克服这一问题,到目前为止,我已经解决了使用LoginDisplay组件razor中的Authorized部分的解决方案,以触发服务检查服务用户信息是否为空,然后再次转到Graph,而不是尝试存储在localstorage或类似的东西中。。。然后,我让显示用户信息的组件订阅服务中的事件,以了解何时需要更新用户信息以调用StateHasChanged()
如果有更好的解决方案跨页面刷新持久化服务数据,我会全神贯注。解决这个问题的一个方法是制作一个封装应用程序的组件,并检查用户是否在OnInitialized()中经过身份验证。再加上订阅AuthenticationStateProvider.AuthenticationStateChanged对我来说很有效。我发布了一个更详细的解决方案。谢谢你的意见,杰夫。如果我尝试您的建议使用OnParameterSet,它不会在页面刷新(F5)实际发生时被触发。我终于克服了这个问题,我将用迄今为止的答案更新我的问题。