HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
프로그래머스 프론트엔드 데브코스 2기
프로그래머스 프론트엔드 데브코스 2기
/
😇
오프팀
/
🔥
팀 프로젝트 문서
/
💥
토큰문제
💥

토큰문제

상태
기타
담당자
 

1️⃣ 로그아웃 이후 이전 사용자로 팔로우 요청이가네?

팔로우 요청시 토큰이 이전 사용자라서 발생한 문제
 
export const Follow = (token, userId) => { return request({ method: API_METHOD.POST, url: `/follow/create`, headers: { Authorization: `Bearer ${token}`, }, data: { userId, }, }); }; export const unFollow = (token, id) => { return request({ method: API_METHOD.DELETE, url: `/follow/delete`, headers: { Authorization: `Bearer ${token}`, }, data: { id, }, }); };
 

2️⃣ 실험

토큰: handles에 있는 const [localToken, setLocalToken] = useLocalToken();) 로 가져온 값
로컨토큰: 로컬 스토리지에 있는 토큰
 

1. 배포 사이트

결과: 팔로우 시 사용하는 토큰은 처음 접속자의 토큰이다.
실험결과
관리자로 로그인 : 토큰 일치
  • 토큰: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyOWUyOWJkNmQxOGI0MWM1YjIzOGJhMiIsImVtYWlsIjoiYWRtaW5AcHJvZ3JhbW1lcnMuY28ua3IifSwiaWF0IjoxNjU1ODg2MjIwfQ.iX0DzjV7pQXlKOHch0_NsIuzgfbw28cT2fVpVy2F68Y
  • 로컬 토큰
    • eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyOWUyOWJkNmQxOGI0MWM1YjIzOGJhMiIsImVtYWlsIjoiYWRtaW5AcHJvZ3JhbW1lcnMuY28ua3IifSwiaWF0IjoxNjU1ODg2MjIwfQ.iX0DzjV7pQXlKOHch0_NsIuzgfbw28cT2fVpVy2F68Y
       
관리자 로그아웃 이후
초린이 로그인: 토큰 불일치 여전히 관리자 토큰 사용
  • 토큰 (팔로우시)
    • eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyOWUyOWJkNmQxOGI0MWM1YjIzOGJhMiIsImVtYWlsIjoiYWRtaW5AcHJvZ3JhbW1lcnMuY28ua3IifSwiaWF0IjoxNjU1ODg2MjIwfQ.iX0DzjV7pQXlKOHch0_NsIuzgfbw28cT2fVpVy2F68Y
  • 로컬 토큰
    • eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjMwMWM3NDg1MDU5MTc5OTUwYzMxYSIsImVtYWlsIjoiZmRzZmpAY28ua3IifSwiaWF0IjoxNjU1OTA1NDM1fQ.affBHJGe2Wrzmfsln5Ux-Ku4leUZZwcDkl43TXPOa-E
  • 토큰 (이름변경시)
    • 근데 웃긴게 팔로우 이외의 요청엔 로컬토큰과 같은 토큰 사용
      eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjMwMWM3NDg1MDU5MTc5OTUwYzMxYSIsImVtYWlsIjoiZmRzZmpAY28ua3IifSwiaWF0IjoxNjU1OTA1NDM1fQ.affBHJGe2Wrzmfsln5Ux-Ku4leUZZwcDkl43TXPOa-E
 
초린이 로그아웃 이후
초록이에요 로그인: 토큰 불일치 여전히 관리자 토큰 사용
  • 토큰 (팔로우시)
    • eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyOWUyOWJkNmQxOGI0MWM1YjIzOGJhMiIsImVtYWlsIjoiYWRtaW5AcHJvZ3JhbW1lcnMuY28ua3IifSwiaWF0IjoxNjU1ODg2MjIwfQ.iX0DzjV7pQXlKOHch0_NsIuzgfbw28cT2fVpVy2F68Y
  • 로컬 토큰
    • eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjJlMjkxNDg1MDU5MTc5OTUwOTljOSIsImVtYWlsIjoiZ3JlZW40QGNvLmtyIn0sImlhdCI6MTY1NTkwNTg0NH0.bpS-1J4i9hvGDniO5uxLz9UYVipUMqywJ7pKKpR-jag
  • 토큰 (이름변경시)
    • 근데 웃긴게 팔로우 이외의 요청엔 로컬토큰과 같은 토큰 사용
      eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjJlMjkxNDg1MDU5MTc5OTUwOTljOSIsImVtYWlsIjoiZ3JlZW40QGNvLmtyIn0sImlhdCI6MTY1NTkwNTg0NH0.bpS-1J4i9hvGDniO5uxLz9UYVipUMqywJ7pKKpR-jag

2. 개발자 서버

배포 서버와 같은 결과
 

3️⃣ 원인 추측

localToken의 문제 .. 그런데 어째서 얘만…

현재 token을 받아서 사용하는 곳은 handles.jsx 파일

해당 파일 내에서 모두 아래 localToken을 사용중…
const [localToken, setLocalToken] = useLocalToken();
 

이름수정의 경우 localToken이 현재 사용자의 토큰임

//회원 이름수정 const handlechangeUserName = useCallback( async (fullName, username) => { console.log('이름변경토큰', localToken); console.log('이름변경토큰'); if (localToken && fullName) { await changeUserName(localToken, fullName, username); } }, [localToken], );
 

근데 팔로우, 언팔만 왜이러지..?

얘네 둘은 이름 변경이랑 같은 파일에 있고, 같은 localToken을 사용함. 근데 왜 token이 다른거지..
//팔로우 const handlefollow = useCallback( async (userId) => { if (localToken && userId) { console.log('팔로우토큰', localToken); const { data } = await Follow(localToken, userId); await setNotification(localToken, 'FOLLOW', data._id, data.user, null); return data; } }, [localToken], ); //언팔 const handleUnFollow = useCallback( async (followId) => { console.log('팔로우토큰', localToken); if (localToken && followId) { await unFollow(localToken, followId); } }, [localToken], );

관리자
 
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjJlMjkxNDg1MDU5MTc5OTUwOTljOSIsImVtYWlsIjoiZ3JlZW40QGNvLmtyIn0sImlhdCI6MTY1NTkwODA3N30.Tu1X_14kzc03pwm_zMg_5tkjqyEuCADBbzCXKhiKeC4”
 
프로필
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjJlMjkxNDg1MDU5MTc5OTUwOTljOSIsImVtYWlsIjoiZ3JlZW40QGNvLmtyIn0sImlhdCI6MTY1NTkwODA3N30.Tu1X_14kzc03pwm_zMg_5tkjqyEuCADBbzCXKhiKeC4
 
비밀번호
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjJlMjkxNDg1MDU5MTc5OTUwOTljOSIsImVtYWlsIjoiZ3JlZW40QGNvLmtyIn0sImlhdCI6MTY1NTkwODA3N30.Tu1X_14kzc03pwm_zMg_5tkjqyEuCADBbzCXKhiKeC4
 
팔로우
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjJlMjkxNDg1MDU5MTc5OTUwOTljOSIsImVtYWlsIjoiZ3JlZW40QGNvLmtyIn0sImlhdCI6MTY1NTkwODA3N30.Tu1X_14kzc03pwm_zMg_5tkjqyEuCADBbzCXKhiKeC4
 
관리자 토큰

 
HANDLE_팔로우토큰 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjJlMjkxNDg1MDU5MTc5OTUwOTljOSIsImVtYWlsIjoiZ3JlZW40QGNvLmtyIn0sImlhdCI6MTY1NTkwODA3N30.Tu1X_14kzc03pwm_zMg_5tkjqyEuCADBbzCXKhiKeC4
 
이름
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjMzMjMzNDg1MDU5MTc5OTUwZTBkOCIsImVtYWlsIjoiZ3JlbTFAY2wua2UifSwiaWF0IjoxNjU1OTEwOTYzfQ.j9HLxVUgIV0p4e5lQavdptixCAlnPRxLKf0U73ZY8Ug
 

선인장짱짱
 
이름변경
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjMzMjlmNDg1MDU5MTc5OTUwZTI0MCIsImVtYWlsIjoiZ3JlZUBjby5rciJ9LCJpYXQiOjE2NTU5MTEwNzF9.9yCChwb5IMEBd5rZDUR4NPa8Uj4hWAPIAoHohe-SzyQ
 
팔로우
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjJlMjkxNDg1MDU5MTc5OTUwOTljOSIsImVtYWlsIjoiZ3JlZW40QGNvLmtyIn0sImlhdCI6MTY1NTkwODA3N30.Tu1X_14kzc03pwm_zMg_5tkjqyEuCADBbzCXKhiKeC4
 
로컬스토리지
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjMzMjlmNDg1MDU5MTc5OTUwZTI0MCIsImVtYWlsIjoiZ3JlZUBjby5rciJ9LCJpYXQiOjE2NTU5MTEwNzF9.9yCChwb5IMEBd5rZDUR4NPa8Uj4hWAPIAoHohe-SzyQ”
 

꽃님
 
팔로우
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjMzMjlmNDg1MDU5MTc5OTUwZTI0MCIsImVtYWlsIjoiZ3JlZUBjby5rciJ9LCJpYXQiOjE2NTU5MTEwNzF9.9yCChwb5IMEBd5rZDUR4NPa8Uj4hWAPIAoHohe-SzyQ
 
이름변경
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjMzM2FjNDg1MDU5MTc5OTUwZTNkMCIsImVtYWlsIjoiZ3JlZW45OTFAY28ua3IifSwiaWF0IjoxNjU1OTExMzQwfQ.qw6UHgGG-pw6pL-5LwNfGq0MOZGhhkPDz9rrqIl0l08
 
로컬스토리지
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjMzM2FjNDg1MDU5MTc5OTUwZTNkMCIsImVtYWlsIjoiZ3JlZW45OTFAY28ua3IifSwiaWF0IjoxNjU1OTExMzQwfQ.qw6UHgGG-pw6pL-5LwNfGq0MOZGhhkPDz9rrqIl0l08”
 

사용자
 
로컬
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyOWUyOWJkNmQxOGI0MWM1YjIzOGJhMiIsImVtYWlsIjoiYWRtaW5AcHJvZ3JhbW1lcnMuY28ua3IifSwiaWF0IjoxNjU1OTExODk3fQ.RI5YnV_tOFKI-UBQ8mbe-lKXAAaXZEbSIafek4vSSmc”
 
팔로우
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjYyYjMzM2FjNDg1MDU5MTc5OTUwZTNkMCIsImVtYWlsIjoiZ3JlZW45OTFAY28ua3IifSwiaWF0IjoxNjU1OTExMzQwfQ.qw6UHgGG-pw6pL-5LwNfGq0MOZGhhkPDz9rrqIl0l08