Conversation
4abd637 to
38c707f
Compare
|
isRefreshing << 이 true일 때 토큰을 공유한다? isRefreshing이 true일 때랑, false일 때랑 차이? |
|
일단 이 로직의 핵심은 한가지 요청이 아닌 여러가지의 요청이 왔을때 reissue 요청이 무분별하게 이루어지는 문제를 해결하기 위한 로직입니다 첫번째 요청이 와서 reissue를 요청할때 isRefreshing은 true가 되고 첫번째 요청이 끝나기 전까지 다른 요청들은 refreshSubscribers에 저장되어 첫번째 요청의 갱신이 끝나 isRefreshing이 false가 되고, refreshSubscribers에 저장되어 있던 요청들을 한번에 처리합니다. 즉 isRefreshing이 true라면 이미 특정 api 요청이 reissue 요청을 하고 있다는 뜻이기 때문에 다른 요청들은 reissue 요청을 하지 않고 기다리고 있는 상태가 됩니다 isRefreshing이 false가 됐다는것은 첫번째 요청이나 그 전의 요청이 갱신되었다는 뜻이며 새로운 요청이 왔을때 그 요청은 reissue 요청을 할 수 있다는 뜻이 됩니다 아직 정확한 확인을 해보지는 못하여 이 로직이 reissue 요청이 반복 되는것을 막는지는 정확히 모르고 있어 코드 수정이 생길 수 있습니다 |
|
무분별한 reissue 요청이 일어난 이유는 못 찾은 건가요? 첫 번째 요청이 오면 -> 결국 요지는 "무분별한 reissue 요청이 일어난 원인"을 알아내고 그걸 고쳐야 할 듯 합니다. 위 원인을 알면 isRefreshing 조건에 따라 true, false 처리 해 주고, refreshSubscribers.. 복잡하게 이런 필요가 없잖아요 reissue 요청이 무분별하게 일어나는 원인이 저도 궁금하네요 |
|
먼저 제가 reIssue 관련 문제를 알게 된 것은 어제 스퀘어쪽에서 DMS 어드민에서 reIssue 요청이 많이 온다고 하여서 알게 되었으며 이 문제를 의진 선배님께 알리고 해결해 보려고 했던 상황이였습니다. 일단 accessToken 만료 시간은 하루정도 되는 걸로 알고 있습니다 의진 선배님께서는 reissue 토큰 코드가 여러번 실행 되는지, accessToken 시간이 너무 짧은지, refreshToken이 만료 되었을때 로그아웃 처리가 되는지를 확인해보라고 하셨습니다, 제가 확인해본건 reissue 토큰 코드가 여러번 실행 되는쪽이였고 이를 수정한 것 같습니다 금일 전공 동아리 시간이 있어 전공 동아리 시간에 해결을 해보고 안되면 선배님의 도움이 필요 할 것 같습니다 |
|
이 이슈가 전에 한 번 있었는데 어찌저찌 해결은 했던 걸로 기억 하는데 오래 돼서 좀 가물가물 합니다,, accessToken 만료 시간 좀 줄이고 reissue쪽 금일 전공 동아리 시간 많으니까 우선적으로 봐 주세요 의진이랑 같이 고민 하면서 계속 코멘트 달아주세요 의진이랑은 따로 연락해서 이슈 계속 확인하겠습니다 |
|
이 이슈 어떻게 됐나요 |
|
일단 스퀘어 문제는 해결이 되었고, 그 이후 이 이슈 해결 관련은 진행된게 딱히 없습니다 |
|
이거 빨리 해결합시다 |
토큰 만료 에러 처리 로직 수정 - 기존에는 'Expired Token' 메시지로 에러 처리 - 401, 403 에러에 대해서 refresh token으로 재발급 요청 - 토큰 만료 외 다른 401, 403 에러에도 재발급 요청하여 문제 발생 가능성 해결
개요
api 로직 수정
이슈 번호
변경사항
isRefreshing 을 추가하여 isRefreshing === true 라면 토큰을 공유하고 기존 요청을 다시 하도록 설정
이미 reIssue 요청이 진행중이면 refreshSubscribers 배열에 기존 요청을 저장해 두고, reIssue가 완료되면 한꺼번에 재시도
refrash_token도 만료된 상태라면 로그인 페이지로 사용자를 보냄