개발자
로그인을 했을 때 access_token, refresh_token을 받아서 클라리언트에서 쿠키로 저장을 했습니다. access_token이 만료됬을 때 refresh_token을 넘겨줘야 하는데 이 부분에서 궁금한게 있습니다. 만약에 글쓰는 부분같이 access_token이 필요한 부분에서 access_token이 만료된 경우에 refresh_token을 넘겨주고 access_token을 다시 받아오는데 이미 여기서 글쓰기는 access_token이 없어서 실패하는 거잖아요. 그러면 다시 글쓰기를 시도해야 하는건가요? 아니면 access_token이 없어지고 refresh_token을 줘서 받아오는게 아니라 access_token이 만료 기간이 다가오면 넉넉하게 잡아서 refresh_token을 줘서 받아오는건가요??
답변 2
인기 답변
글을 쓰다가 access토큰이 만료된 경우인가요? 아래 로직이 실행되겠네요. 1. access토큰이 만료되었으므로 서버에서 400을 뱉습니다. 2. 그러면 클라이언트 로직에 의해 refresh토큰으로 access토큰을 갱신하는 일종의 revoke API가 호출될겁니다. 3. revoke가 완료되면 서버에서 새로운 access토큰을 주고, 클라이언트에 저장됩니다. 4. 클라이언트에선 새로운 access토큰으로 글 저장 API를 또 날립니다. 5. 글이 잘 저장됩니다. 이때 1~5의 로직을 타는 것 때문에 고객에게 글 쓰기 실패 관련 메세지를 한번은 보여주어야 할것으로 보여집니다. '다시 시도해 주세요.' 등... 이는 업무협의하기 나름입니다. 안보여줄수도 있죠. 안보여주고 하려면... 클라이언트나 서버단에서 400이 날때 어떤 API를 호출했는지 알고 있어야 할 필요가 있겠네요. revoke 로직에 심을 수도 있겠구요. (서버에서 갱신처리를 하면서 400오류난 API를 처리하고 나서, 갱신된 access토큰을 클라이언트에 보내줌) 전에 회사에선 어떻게 했냐면.. GET API기준으로, 경우는 조금 다릅니다. react-query에서 서버에 요청할 때 실패가 나면 3번정도 시도를 합니다. 이때 400이 나면 갱신로직이 돌면서 그 다음번에 시도를 해서 가져왔습니다. 200 400 200 이렇게 스테이터스가 찍혔죠. 아무튼 방법은 다양합니다. 그럼 즐거운 개발 되세요~
결론만 말하면 다시 시도하는 전자가 일반적입니다. a 요청 -> accessToken 만료로 실패 (이때 보통 서버와 합의하여 에러 상태코드를 지정합니다) -> refreshToken을 가지고 accessToken 발급 -> (1) 성공 or (2) 실패 (1) 새로운 access_token을 가지고 a 재요청, 이전 요청과 동일한 parameter를 가지고 재요청, 필요시 axios intercepter 등 사용하여 공통로직으로 관리 (2) 로그아웃 처리 (클라쪽 로컬에 access_token, refresh_token 등 제거)
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!