Я пытаюсь создать экран блокировки для пользователя через 20 минут (для тестирования я поставил 20 секунд).
Я создал промежуточное ПО, которое перенаправляет на заблокированный экран, где пользователь может вставить пароль, чтобы снова его разблокировать. Это прекрасно работает при перезагрузке, но я хотел бы сделать это с socket.io, чтобы пользователь получил предупреждение, скажем, за 5 минут до того, как учетная запись перейдет в заблокированное состояние, и именно здесь я борюсь.
Это мое промежуточное ПО
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!$this->session->has('lastActivityTime')) {
$this->session->put('lastActivityTime', time());
} else if (time() - $this->session->get('lastActivityTime') > $this->getTimeOut()) {
broadcast(new SessionTimeoutCheck('hello'));
$this->session->forget('lastActivityTime');
$this->session->put('locked', true);
return redirect($this->getRedirectUrl())->with([$this->getSessionLabel() => 'You have been inactive.']);
}
$this->session->put('lastActivityTime', time());
return $next($request);
}
Это прекрасно работает с перезагрузкой.
У меня есть это на моем клиенте JS
/**
* @desc Session timeout warning and lock screen
*/
socket.emit('private.user.channel', {
channel: 'private.user.channel.' + user_id,
}).on("App\\Events\\API\\SessionTimeoutCheck", function (data) {
console.log(data);
});
Так что теперь мне интересно, должен ли я создать команду, которая запускается каждую минуту, чтобы проверить, прошло ли определенное время, а затем показать предупреждение или какой будет лучший подход?