ค้นหาเว็บไซต์

javascript - วิธีออกจากระบบของผู้ใช้เมื่อมีผู้ใช้ใหม่เข้าสู่ระบบในเบราว์เซอร์เดียวกัน?


ฉันกำลังเจอปัญหานี้ที่ฉันมีแดชบอร์ดสองอันสำหรับผู้ใช้สองคน หนึ่งอันสำหรับผู้ดูแลระบบและอีกอันสำหรับผู้ค้า ปัญหาคือเมื่อผู้ดูแลระบบเข้าสู่ระบบและในแท็บใหม่ผู้ค้าก็เข้าสู่ระบบเช่นกัน หากฉันรีเฟรชหน้าผู้ดูแลระบบ ฉันจะได้แถบนำทางที่ควรเป็นของผู้ค้าและส่วนที่เหลือของหน้าคือของผู้ดูแลระบบ... ฉันเก็บโทเค็นไว้ใน localStorage

มีใครสามารถบอกฉันได้ไหมว่าฉันจะออกจากระบบผู้ใช้ที่เข้าสู่ระบบก่อนหน้านี้ได้อย่างไร หากมีผู้ใช้ใหม่เข้าสู่ระบบในเบราว์เซอร์เดียวกัน?

คำตอบ #1

ถ้าคุณละเลย IE ฉันชอบใช้ Broadcast Channel API แทนเหตุการณ์ localStorage

เริ่มช่องกระจายเสียงของคุณและฟังเหตุการณ์

const bc = new BroadcastChannel("your_channel_name")

bc.onmessage = (e) => {
  // Business logic here
  // data sent through the channel is available at e.data
}

เมื่อคุณต้องการกระตุ้นเหตุการณ์

bc.postMessage("your logout message");

คำตอบ #2

ถ้าคุณจำเป็นต้องออกจากระบบในแท็บอื่น มันจะช่วยได้ถ้าส่งสัญญาณระหว่างหลายแท็บ คุณสามารถใช้เหตุการณ์ของ local storage ได้

ตั้งค่ากิจกรรมออกจากระบบบนแท็บก่อนหน้า

localStorage.setItem('logout-event', 'logout' + Math.random());

ทุกแท็บอื่นจะฟังมันด้วยโค้ดด้านล่าง

window.addEventListener('storage', function(event){
    if (event.key == 'logout-event') { 
        // your code here
    }
});

พูดง่ายๆ คือทุกครั้งที่พ่อค้าล็อกอินโดยใช้แท็บใหม่ ให้ทำตามขั้นตอนข้างต้นเพื่อลงชื่อออกจากผู้ใช้อื่นใดๆ