看起来Blazor目前不支持通过滑动过期机制检查因不活动而导致的身份验证超时。
我想要实现的是一旦用户的会话时间结束就重定向到登录页面。我可以想象必须在RevalidatingIdentityAuthenticationStateProvider
中检测站点上的活动并在会话超时时将用户重定向到登录页面,但不确定如何实现这一点?
看起来Blazor目前不支持通过滑动过期机制检查因不活动而导致的身份验证超时。
我想要实现的是一旦用户的会话时间结束就重定向到登录页面。我可以想象必须在RevalidatingIdentityAuthenticationStateProvider
中检测站点上的活动并在会话超时时将用户重定向到登录页面,但不确定如何实现这一点?
您实际上不需要使用
RevalidatingIdentityAuthenticationStateProvider
来验证您的应用程序。您的 app.razor 只需要像这样的代码:
<CascadingAuthenticationState>
<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
<AuthorizeRouteView RouteData="@routeData"
DefaultLayout="@typeof(MainLayout)">
<NotAuthorized>
**<RedirectToLogin> </RedirectToLogin>**
</NotAuthorized>
<Authorizing>
<h1>Authentication in progress</h1>
<p>Only visible while authentication is in progress.</p>
</Authorizing>
</AuthorizeRouteView>
</Found>
<NotFound>
....
</NotFound>
</Router>
</CascadingAuthenticationState>
[CascadingParameter]
private Task<AuthenticationState> AuthenticationStateTask { get; set; }
protected override async Task OnAfterRenderAsync(bool firstRender)
{
var authenticationState = await AuthenticationStateTask;
try
{
if (authenticationState?.User?.Identity is null || !authenticationState.User.Identity.IsAuthenticated)
{
var returnUrl = Navigation.ToBaseRelativePath(Navigation.Uri);
if (string.IsNullOrWhiteSpace(returnUrl))
Navigation.NavigateTo("/Identity/Account/Login", true);
else
Navigation.NavigateTo($"/Identity/Account/Login?returnUrl=~/{returnUrl}", true);
}
}
catch (Exception e)
{
}
}
authenticationState?.User?.Identity
是否为空,但在您的示例中,authenticationState从未设置为null。那么,这将如何导致X分钟不活动后注销/重定向? - Joseph R