Рейтинг:1

Как заставить пользователя выйти из библиотеки JavaScript в пользовательском модуле?

флаг in

Я написал специальный модуль для Drupal 8, чтобы часто отслеживать местоположение пользовательского устройства. Если пользователь выходит за пределы разрешенной зоны, мне нужно принудительно вывести пользователя из веб-сайта. Я создал следующие файлы в папке модуля (gps_test):

  1. Файл gps_test.info.yml
  2. Файл gps.js: программа JavaScript для отслеживания местоположения пользовательского устройства по GPS.
  3. Файл gps_test.libraries.yml: Содержит gps.js библиотека.
  4. Файл gps_test.module: Реализует хук для подключения библиотеки JavaScript при каждой загрузке страницы.
функция gps_test_page_attachments (массив и $ страница) {
  $page['#attached']['library'][] = 'gps_test/gps';
}

Как я могу заставить пользователя выйти из системы (или запретить пользователю использовать веб-сайт) с gps.js библиотека?

Рейтинг:4
флаг de

Как упомянул @Tushar, вы можете использовать пользователь_выход() функция.

Самый простой способ, который я вижу, - это вывести вашего пользователя из системы с помощью вызова AJAX, когда ваш JS обнаружит, что пользователю необходимо выйти из системы. Вот базовый пример того, как это можно сделать.

В вашем JS вам нужно добавить:

Drupal.behaviors.logout= {
  прикрепить: функция (контекст, настройки) {
    если (вашеУсловиеToLogOutUserisMet) {
      $.ajax({
        url: "/log-me-out", // настраиваемый маршрут для выхода текущего пользователя
        успех: функция (данные) {
          // делайте все, что хотите, в случае успеха вашего ajax-вызова
        }
      });
    }
  }
}

Затем создайте собственный маршрут в файле gps_test.routing.yml.

gps_test.my_custom_log_out:
  путь: '/ log-me-out'
  значения по умолчанию:
    _controller: '\Drupal\gps_test\Controller\MyLogOutController::logUserOut'
  требования:
    _permission: 'доступ к содержимому'

И, наконец, создайте контроллер маршрута:

пространство имен Drupal\gps_test\Controller;

используйте Drupal\Core\Controller\ControllerBase;
используйте Symfony\Component\HttpFoundation\JsonResponse;


класс MyLogOutController расширяет ControllerBase {
  функция logUserOut() {
    если ($this->currentUser()->isAuthenticated()) {
      пользователь_выход();

      вернуть новый JsonResponse([
        'message' => "Текущий сеанс пользователя завершен.",
      ], 200);
    }
  }  
}
leymannx avatar
флаг ne
В классах следует избегать вызовов Drupal. Контроллеры имеют метод currentUser. `if ($this->currentUser()->isAuthenticated()) {`.
флаг cn
Также нет разрешения на просмотр опубликованного контента — вы, вероятно, имели в виду «доступ к контенту».
misterdidi avatar
флаг de
Вы оба правы. Я отредактировал свой ответ, чтобы учесть ваши комментарии.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.