여러 탭에서 로그아웃하는 방법 | 반응 웹 앱
이러한 시나리오에서 사용자 경험을 개선하는 방법 중 하나는 사용자가 웹사이트의 탭에서 로그아웃할 때 다른 모든 탭에서 한 번 로그아웃되도록 하는 것입니다. 그런 다음 사용자를 공개 페이지로 리디렉션하고 가능한 경우 로컬 저장소에서 JWT 토큰을 삭제하여 민감한 데이터를 화면에서 제거해야 합니다.
나는 이런 종류의 기능에 대해 초보자에게 친숙한 간단한 예제를 구현했습니다. 계속해서 내가 어떻게했는지 봅시다. 이 작업link으로 이동하여 시작 프로젝트를 로컬 시스템에서 선택한 디렉토리로 다운로드하거나 복제합니다.
시작 프로젝트를 복제한 후 아래와 같은 구조를 가져야 합니다. npm install을 실행하여 종속성을 설치합니다.
터미널에서 이 종속성을 설치하십시오
npm i broadcast-channel
.Broadcast Channel API에 대해 자세히 알아보려면 다음 링크로 이동하는 것이 좋습니다.
[ https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API ]
[ https://github.com/pubkey/broadcast-channel ]
브로드캐스트 채널 종속성 설치가 완료되면 터미널에서 npm start를 실행하여 애플리케이션을 시작합니다. 이제 애플리케이션이 포트 3000 또는 구성한 모든 포트에서 실행 중이어야 합니다.
계속해서 로그인 버튼을 클릭하면 대시보드로 이동합니다. 테스트로 현재 탭을 3개 또는 4개 탭으로 복제한 다음 첫 번째 탭으로 돌아가서 로그아웃을 클릭합니다.
보시다시피 이 첫 번째 탭의 로그인 페이지로 이동하지만 다른 탭은 여전히 로그인되어 있습니다(사용자 경험이 좋지 않습니까?). 이 문제를 해결하기 위해 auth 폴더 내의 auth.js 파일에 몇 줄의 코드를 추가합니다.
auth.js 파일의 기존 코드를 아래 코드로 바꾸고 저장합니다.
import history from 'history/browser'
import { BroadcastChannel } from 'broadcast-channel';
const logoutChannel = new BroadcastChannel('logout');
export const login = () => {
localStorage.setItem("token", "this_is_a_demo_token")
history.push('/app/dashboard')
}
export const checkToken = () => {
const token = localStorage.getItem("token", 'this_is_a_demo_token' )
if(!token) return alert('You are not logged in')
return token
}
export const logout = () => {
logoutChannel.postMessage("Logout")
localStorage.removeItem("token", 'this_is_a_demo_token' )
window.location.href = window.location.origin + "/";
}
export const logoutAllTabs = () => {
logoutChannel.onmessage = () => {
logout();
logoutChannel.close();
}
}
여기서 우리가 한 것은 브로드캐스트 채널 모듈을 가져오는 것이었고 인스턴스, logoutChannel 및 "로그아웃"을 생성했습니다. 로그아웃할 때마다 "로그아웃"메시지가 동일한 호스트 및 포트의 다른 탭으로 전송됩니다(호스트는 로컬 시스템 및 포트 3000임).
또한 App.js 파일의 기존 코드를 아래 코드로 바꾸고 저장합니다.
import React, { useEffect } from "react";
import { logoutAllTabs } from "./auth/auth";
import Router from "./routes";
function App() {
useEffect(() => {
logoutAllTabs()
}, [])
return (
<>
<Router/>
</>
);
}
export default App;
이제 다시 시작하고 다른 모든 탭을 닫고 로그인 페이지에 하나를 남겨두고 로그인을 클릭하면 대시보드로 이동합니다. 현재 탭을 3개의 추가 탭으로 복제합니다. 이 단계에서 페이지 중 하나에서 로그아웃하면 열려 있는 다른 모든 탭도 동시에 로그아웃되어야 합니다.
그게 다야!. 이제 자신의 React 애플리케이션에서도 이를 구현할 수 있습니다. 튜토리얼이 유용하다고 생각되면 GitHub에서 별표를 주시거나 Twitter에서 저를 팔로우하세요.
Reference
이 문제에 관하여(여러 탭에서 로그아웃하는 방법 | 반응 웹 앱), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/demawo/how-to-logout-of-multiple-tabs-react-web-app-2egf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)