需要经过身份验证的用户(适用于整个应用)



如何将 Blazor WebAssembly 配置为要求整个应用使用经过身份验证的用户,而不是使用 [Authorize] 属性标记每个页面或控制器?

我的应用应仅允许授权用户,并且建议的配置在重定向到登录名之前加载页面的一小部分。

如果您的应用程序是独立的,一个简单的方法是在 pages 文件夹中添加新_Imports.razor。 然后把这一行放进去。

@attribute [Authorize]

如果是自托管的。 尝试此链接以在浏览器中添加没有令牌的全局身份验证。

如何将 Blazor WebAssembly 配置为要求整个应用使用经过身份验证的用户,而不是使用 [Authorize] 属性标记每个页面或控制器?

您可以在主页加载时检查身份验证状态并决定下一步要执行的操作。

我的应用应仅允许授权用户,并且建议的配置在重定向到登录名之前加载页面的一小部分。

将下面的代码复制到Index.razor

@inject NavigationManager Navigation
@code{ 
[CascadingParameter]
private Task<AuthenticationState> authenticationStateTask { get; set; }
protected async override Task OnInitializedAsync()
{
base.OnInitialized();
var authState = await authenticationStateTask;
var user = authState.User;
if(!user.Identity.IsAuthenticated)
{
Navigation.NavigateTo($"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
}
}
}

还有其他一些解决方案建议在不需要授权的页面上添加@attribute [Microsoft.AspNetCore.Authorization.Authorize]_Imports.cs@attribute [Microsoft.AspNetCore.Authorization.AllowAnonymous]。这从来没有像预期的那样对我有用,但很高兴知道它。

尝试在布局页面中使用[Authorize]

我的应用应仅允许授权用户,并且建议的配置在重定向到登录名之前加载少量页面。

您应该在App.razor文件中执行此操作。它将先于其他任何方式执行,并确保用户在渲染任何其他组件之前经过身份验证和授权。

<CascadingAuthenticationState>
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
<Found Context="routeData">
<AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)">
<NotAuthorized>
@if (context.User.Identity != null && !context.User.Identity.IsAuthenticated)
{
<RedirectToLogin />
}
else
{
<p>You are not authorized to access this resource.</p>
}
</NotAuthorized>
<Authorizing>
<Loader />
</Authorizing>
</AuthorizeRouteView>
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<div class="row justify-content-center">
<div class="col text-center">
<h2>Looks like you're lost, we didn't find anything at this location.</h2>
<p>Try navigating to the Dashboard or going back in the browser.</p>
</div>
</div>
</LayoutView>
</NotFound>
</Router>
</CascadingAuthenticationState>

相关内容

  • 没有找到相关文章

最新更新