Skip to content

세션 토큰을 통한 익명 유저관리

shl0501 edited this page Dec 1, 2024 · 1 revision

📄 세션 토큰을 통한 익명 유저 관리

세션 토큰을 통해 유저를 인식하는 방법에 대해 설명합니다.

🧩 배경 및 필요성

ASK-IT은 세션페이지에서 자신이 작성한 글을 수정 및 삭제할 수 있습니다. 이때 로그인한 유저뿐만 아니라 로그인하지 않은 익명의 유저또한 글을 수정 및 삭제할 수 있습니다.

익명의 유저가 세션페이지에 재접속했을 때도 자신이 작성한 글을 수정 및 삭제할 수 있도록 특정 글이 어떤 유저가 작성한 것인지 확인할 수 있는 기술이 필요합니다.

🗺️ 문제 해결 과정

유저의 세션토큰 발급

유저는 세션에 접속할 때 해당 세션에서만 유효한 토큰을 발급 받습니다. 해당 토큰은 USER_ID와 함께 DB와 로컬스토리지에 저장되며, 사용자가 세션에 다시 접속할 경우 USER_ID와 토큰을 통해 사용자를 확인합니다.(익명 사용자의 USER_ID는 null입니다)

유저 확인 로직

유저를 확인할 때는 다음과 같이 클라이언트로부터 받은 토큰과 USER_ID의 존재여부에 따라 4가지의 케이스가 존재합니다.

토큰 ID 검증 데이터 데이터 존재여부 반환 값 비고
O O {토큰, ID} O 입력받은 토큰 로그인한 유저가 접속한 경우
O O {토큰, ID} X 새로운 토큰 로그인한 유저가 세션에 처음 접속한 경우
O X {토큰, NULL} O 입력받은 토큰 익명의 유저가 세션에 다시 접속한 경우
O X {토큰, NULL} X 새로운 토큰 로그인한 유저가 로그아웃 후 익명으로 접속한 경우
X O {ID} O 저장된 토큰 이전에 접속했던 유저가 토큰 삭제 후 다시 접속한 경우
X O {ID} X 새로운 토큰 로그인한 유저가 세션에 처음 접속한 경우
X X {} X 새로운 토큰 익명의 유저가 세션에 처음 접속한 경우

📈 결과 및 성과

토큰 조작

  • 로그인한 유저가 토큰을 조작한 경우

    DB에서 세션의 ID에 유저의 ID가 매핑되어 있는경우 저장된 토큰을 발급함으로써 문제를 해결하였습니다.

특수 케이스

  • 로그인한 유저가 로그아웃 후 익명으로 접속할 경우

    이 경우 로그인 했던 유저의 토큰을 통해 익명의 사용자가 접속을 시도합니다. 세션 ID에 클라이언트로부터 받은 토큰이 매핑되어 있지만, 유저의 ID가 같지 않으므로 익명으로 접속할 수 있도록 합니다.

위와 같이 특수한 케이스를 포함한 모든 상황에 대해 유저는 문제없이 자신이 작성한 글을 수정 및 삭제할 수 있습니다.

Clone this wiki locally