首页 > 解决方案 > 当用户首次登录时,Blazor 服务器应用程序是否有我可以处理的事件?

问题描述

我有一个使用 Azure AD 身份验证的 Blazor 服务器端应用程序。我想从数据库或 Web API 中获取有关当前用户的一些数据,并在他们首次登录时将其缓存,然后能够在会话期间使用它,而无需每次需要时都从源中获取。

我不清楚把它放在哪里,或者是否有一个我可以添加处理程序的事件。

是否有任何 Blazor 生命周期或其他事件可以可靠地完成?

更新

我发现该AddMicrosoftIdentityWebApp方法有一个可选的重载,可以连接事件。

// Azure AD authentication settings....
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(options =>
    {
        Configuration.Bind("AzureAd", options);
        options.Events ??= new OpenIdConnectEvents();
        options.Events.OnTokenValidated += OnTokenValidatedFuncAsync;

    });

然后OnTokenValidatedFuncAsync处理程序StartUp.cs是:

private async Task OnTokenValidatedFuncAsync(TokenValidatedContext context)
{
    var userName = context.Principal.Identity.Name;

    await Task.CompletedTask.ConfigureAwait(false);
}

这将返回刚刚连接的用户的名称,并且似乎是我正在寻找的事件。

现在的问题是我需要访问 DI 容器来更新将存储我计划检索的设置的用户对象的实例。我尝试了一些选项,但无法从此处访问 DI 容器。我尝试使用 [FromServices] 属性并注入对象,但这在此事件处理程序中不起作用。如何访问此代码中的 DI 容器?

标签: blazor-server-side

解决方案


推荐阅读