在应用程序最初显示之前,有人能帮我推送托管的Blazor应用程序(客户端、服务器和共享应用程序(立即请求登录吗。我想要用户在访问应用程序之前必须登录的体验。
我的起点是Blazor Webassembly(托管(模板与Api授权(个人用户帐户(
在用户请求具有Authorize
属性的特定操作/页面之前,在服务器端操作或客户端Razor页面上使用Authorize
属性将不会启动身份验证流。在应用程序首次显示之前,我应该如何首先启动授权流?
我相信这对比我更精明的人来说是可能的,甚至是微不足道的。有人能把我推向正确的方向吗?
我创建了一个控件RedirectToLogin.razor
@inject NavigationManager Navigation
@code {
protected override void OnInitialized()
{
String thisPage = Navigation.Uri.Replace(Navigation.BaseUri, "~/");
Navigation.NavigateTo($"Identity/Account/Login?returnUrl={thisPage}");
base.OnInitialized();
}
}
然后将其插入主布局.razor
<div class="container-fluid">
<AuthorizeView>
<Authorized>
<NavigationLogger />
<ContextMenuMouseClick>
<MenuTopBar />
<NavMenu />
<SubPageContainer>
@Body
</SubPageContainer>
</ContextMenuMouseClick>
</Authorized>
<NotAuthorized>
<RedirectToLogin />
</NotAuthorized>
</AuthorizeView>
</div>
因此,当加载布局并处于NotAuthorized状态时,它将重定向到登录页面,授权后将返回到它试图访问的页面。
希望这能有所帮助。
Blazor客户端是从wwwroot
中的静态index.html
启动的。在服务器项目中,它被映射到Startup.cs
中的一个端点,基本上是一个包罗万象的端点,而不是Razor Pages或Controllers:
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapFallbackToFile("index.html");
});
对于您的场景:
- 在服务器中创建新布局,例如_LayoutBlazor.cshtml
从客户端重新创建
index.html
的内容。请注意,构建时会将客户端的框架文件复制到服务器wwwroot(_F(::<app>Loading...</app>
<script src="@Href("~/_framework/blazor.webassembly.js")"></script>
创建一个新的Razor页面,并在上面加上"Authorize"标记,然后使用_LayoutBlazor。
从Startup.cs 中删除
endpoints.MapFallbackToFile("index.html");
Mark Gould在这里创建了一个概念验证:RazorBlazor