blazor-server-side - 当用户首次登录时,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 容器?
解决方案
推荐阅读
- java - 如何使用 Spring Data 在 MongoDB 中的继承字段上定义索引?
- vue.js - 对 Cloudant 进行身份验证,每个用户一个 db
- postgresql - 如何对 JSON 使用比较 where 运算符
- scala - 转置大小不等的列表
- javascript - Laravel 对本地 css 和 js 资源的加载非常慢
- javascript - 将存储的值加载到本地日期时间输入中
- rxjs - 如何在 Rxjs 中延迟序列发射
- java - 间歇性 Mongo/JPA IllegalArgumentException 解析地理原生查询
- react-native - 如何在 react-native 中创建渐变文本
- node.js - req.body 在将 bodyParser urlencoded 设置为扩展为 false 后返回未定义