Предупреждение о превышении времени ожидания сеанса Laravel с помощью socket.io - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь создать экран блокировки для пользователя через 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);
});

Так что теперь мне интересно, должен ли я создать команду, которая запускается каждую минуту, чтобы проверить, прошло ли определенное время, а затем показать предупреждение или какой будет лучший подход?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...