Score: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.โมดูล: ใช้ hook เพื่อแนบไลบรารี JavaScript ในการโหลดทุกหน้า
ฟังก์ชัน gps_test_page_attachments (อาร์เรย์ &$ หน้า) {
  $page['#attached']['library'][] = 'gps_test/gps';
}

ฉันจะบังคับให้ผู้ใช้ออกจากระบบ (หรือป้องกันไม่ให้ผู้ใช้ใช้งานเว็บไซต์) จากไฟล์ gps.js ห้องสมุด?

Score:4
ธง de

ดังที่ @Tushar กล่าวถึง คุณสามารถใช้ไฟล์ user_logout() การทำงาน.

วิธีที่ง่ายที่สุดที่ฉันเห็นคือการออกจากระบบผู้ใช้ของคุณด้วยการโทร AJAX เมื่อ JS ของคุณตรวจพบว่าผู้ใช้จำเป็นต้องออกจากระบบ นี่คือตัวอย่างเบื้องต้นของวิธีดำเนินการดังกล่าว

ใน JS ของคุณ คุณต้องเพิ่ม:

Drupal.behaviors.logout= {
  แนบ: ฟังก์ชัน (บริบท การตั้งค่า) {
    ถ้า (yourConditionToLogOutUserisMet) {
      $.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()) {
      user_logout();

      ส่งคืน JsonResponse ใหม่ ([
        'message' => "เซสชันของผู้ใช้ปัจจุบันสิ้นสุดลงแล้ว",
      ], 200);
    }
  }  
}
leymannx avatar
ne flag
ควรหลีกเลี่ยงการใช้ Drupal ในชั้นเรียน คอนโทรลเลอร์มีเมธอด `currentUser ' `if ($this->currentUser()->isAuthenticated()) {`.
cn flag
นอกจากนี้ยังไม่มีสิทธิ์ "ดูเนื้อหาที่เผยแพร่" - คุณอาจหมายถึง "เข้าถึงเนื้อหา"
misterdidi avatar
de flag
คุณทั้งคู่พูดถูก ฉันแก้ไขคำตอบเพื่อพิจารณาความคิดเห็นของคุณ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา