#asp.net-core #blazor #blazor-server-side
#asp.net-core #блейзор #блейзор на стороне сервера
Вопрос:
Похоже, что Blazor в настоящее время не поддерживает проверку времени ожидания аутентификации из-за бездействия с использованием скользящей схемы истечения срока действия.
чего я пытаюсь добиться, так это перенаправить пользователя на страницу входа после того, как у него было время сеанса. Я могу себе представить, что это должно быть что-то, RevalidatingIdentityAuthenticationStateProvider
где мне нужно обнаруживать активность на сайте и перенаправлять пользователя на страницу входа в систему, если сеанс имеет тайм-аут, но не уверен, как я могу этого добиться?
Ответ №1:
на самом деле вам не нужно использовать
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>
убедитесь, что компонент RedirectToLogin перенаправляет пользователя на обратный вызов afterRender
должно выглядеть примерно так
[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)
{
}
}
Комментарии:
1. интересно, как ваш код достигнет запрошенной цели тайм-аута бездействия? Ваш тест перенаправления заключается в том, чтобы определить,
authenticationState?.User?.Identity is null
однако для параметра authenticationState никогда не устанавливается значение null ни на одном таймере в вашем примере. Как это приведет к выходу из системы / перенаправлению после X минут бездействия?2. PS: Я спрашиваю, потому что у меня такая же проблема, и я пришел сюда в поисках идей 🙂
3. я действительно точно не помню этот ответ, но, полагаю, моя идея заключалась в том, чтобы выдать токен, действительный в течение определенного времени, и пользователь не будет аутентифицирован.