Điểm:1

Làm cách nào tôi có thể buộc người dùng đăng xuất khỏi thư viện JavaScript trong mô-đun tùy chỉnh?

lá cờ in

Tôi đã viết một mô-đun tùy chỉnh cho Drupal 8 để thường xuyên theo dõi vị trí thiết bị của người dùng. Nếu người dùng đi ra khỏi ranh giới vùng được phép, tôi cần buộc người dùng đăng xuất khỏi trang web. Tôi đã tạo các tệp sau trong thư mục mô-đun (gps_test):

  1. Tập tin gps_test.info.yml
  2. Tập tin gps.js: Chương trình JavaScript để giám sát vị trí GPS của thiết bị người dùng.
  3. Tập tin gps_test.libraries.yml: Chứa gps.js thư viện.
  4. Tập tin gps_test.module: Triển khai hook để đính kèm thư viện JavaScript trên mỗi lần tải trang.
hàm gps_test_page_attachments(mảng &$page) {
  $page['#attached']['library'][] = 'gps_test/gps';
}

Làm cách nào tôi có thể buộc người dùng đăng xuất (hoặc ngăn người dùng sử dụng trang web) khỏi gps.js thư viện?

Điểm:4
lá cờ de

Như @Tushar đã đề cập, bạn có thể sử dụng user_logout() chức năng.

Cách đơn giản nhất mà tôi thấy là đăng xuất người dùng của bạn bằng lệnh gọi AJAX khi JS của bạn phát hiện ra rằng người dùng cần phải đăng xuất. Đây là một ví dụ cơ bản về cách nó có thể được thực hiện.

Trong JS của bạn, bạn cần thêm:

Drupal.behaviors.logout= {
  đính kèm: chức năng (bối cảnh, cài đặt) {
    if(yourConditionToLogOutUserisMet) {
      $.ajax({
        url: "/log-me-out", // định tuyến tùy chỉnh để đăng xuất người dùng hiện tại
        thành công: chức năng (dữ liệu) {
          // làm bất cứ điều gì bạn muốn khi cuộc gọi ajax của bạn thành công
        }
      });
    }
  }
}

Sau đó, tạo tuyến đường tùy chỉnh của bạn trong gps_test.routing.yml

gps_test.my_custom_log_out:
  đường dẫn: '/log-me-out'
  mặc định:
    _controller: '\Drupal\gps_test\Controller\MyLogOutController::logUserOut'
  yêu cầu:
    _permission: 'truy cập nội dung'

Và cuối cùng, tạo bộ điều khiển tuyến đường:

không gian tên Drupal\gps_test\Controller;

sử dụng Drupal\Core\Controller\ControllerBase;
sử dụng Symfony\Thành phần\HttpFoundation\JsonResponse;


lớp MyLogOutController mở rộng ControllerBase {
  hàm logUserOut() {
    if ($this->currentUser()->isAuthenticated()) {
      user_logout();

      trả lại JsonResponse mới ([
        'message' => "Phiên người dùng hiện tại đã kết thúc.",
      ], 200);
    }
  }  
}
leymannx avatar
lá cờ ne
Các cuộc gọi Drupal nên tránh trong các lớp học. Bộ điều khiển có phương thức `currentUser`. `if ($this->currentUser()->isAuthenticated()) {`.
lá cờ cn
Cũng không có quyền `xem nội dung đã xuất bản` - ý của bạn có thể là `truy cập nội dung`
misterdidi avatar
lá cờ de
Cả hai bạn đều đúng. Tôi đã chỉnh sửa câu trả lời của mình để tính đến nhận xét của bạn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.