blazor - 在每次页面加载时首先需要调用的东西会在 blazor 中出现在哪里?
问题描述
我阅读了 blazor 生命周期文档,但我仍然不确定在哪里可以放置一些我绝对必须作为页面加载的第一件事执行的内容。
例如:
我正在实现一个简单的登录。我使用 localstorage 来保存经过身份验证的用户,其中一个对象字段是插入本地存储的时间,因此我可以将其与 DateTime.Now 进行比较,以查看如果用户按 f5 时对象是否过期。
比较需要作为页面加载的第一件事发生。所以我把它放到OnInitialized
我所有页面使用的布局页面中。问题是OnInitialized
子页面OnInitialized
在布局页面之前被调用,并且孩子希望用户对象已经被设置为做这件事。
登录(主布局)
@inherits LayoutComponentBase;
<!--- material frame --->
@Body
<!--- /material frame --->
@code
{
protected override void OnInitialized()
{
Console.WriteLine("parent");
}
}
考试(儿童)
@layout WebApp.Shared.Layouts.LoggedIn;
<! --- stuff ----.
@page "/app/examinations"
<! --- /stuff ----.
}
@code {
protected override void OnInitialized()
{
Console.WriteLine("child");
}
}
解决方案
OnInitialized
不应用于处理身份验证。但是,Blazor 具有内置的身份验证框架,您可以利用:
- 实现一个自定义的
AuthenticationStateProvider
,覆盖GetAuthenticationStateAsync
确定您的用户是否登录的逻辑。 AuthenticationStateProvider
在客户端启动中注册您的新 用户- 将属性添加
[Authorize]
到需要登录的任何页面
微软完整文档在这里
推荐阅读
- mysql - MySQL 基于客户的不同字段计数
- javascript - 如何在 Input 中设置值并选择
- c++ - 替代获取标准库函数的地址/可能是格式错误的行为
- javascript - 创建一个数组,其中包含对特定数字求和所需的数字
- python - 使用 PIL (python) 将图像数据集加载到内存中会消耗太多内存
- php - 使用 PHP 检查 SSL 证书哈希
- c - scanf("%d/%d/%d) 在 C 中是什么意思?
- flutter - 如何在 Flutter 中访问 GridView 中特定项目的索引?
- javascript - 使用 react redux 探针获取异步数据
- php - 如何解决贪婪的正则表达式