You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[P2] [서버 연동] 가입은 서버에서 끝났는데 앱이 다음으로 못 넘어가고, 다시 누르면 「시간이 초과됐어요」가 뜬다 (INVALID_SIGNUP_TOKEN) #664
가입 화면에서 「가입하기」를 누르면 서버에서는 가입이 끝났는데, 앱은 다음 화면으로 넘어가지 않았습니다. 사용자가 다시 누르자 「시간이 초과됐어요. 처음부터 다시 해주세요」 다이얼로그가 떴습니다. 로그인 화면으로 돌아가 다시 로그인하니 방금 만든 계정으로 들어가졌습니다(중복 계정은 없음).
prod 에서 확인한 것 (11/03 12:23 KST, 1건)
서버 요청 로그로 확인한 순서입니다.
시각 (KST)
요청
서버 결과
12:21:47
POST /v1/auth/oauth/kakao
200, 신규 가입용 signupToken 발급
12:21:55
POST /v1/nicknames/check
200
12:23:17.9
POST /v1/auth/signup
200, 81ms. 계정 생성 완료
(10.6초 동안)
이 사용자의 요청 없음
12:23:28.5
POST /v1/auth/signup (같은 토큰)
400 INVALID_SIGNUP_TOKEN (1회용 토큰 재사용)
12:23:31
POST /v1/auth/oauth/kakao
200, 기존 계정으로 로그인
12:23:32~
홈·챌린지·알림 등
정상
가입이 정상 완료되면 navigationHelper.goHomeOrPending() 으로 넘어가 홈 API 가 바로 나갑니다(재로그인 뒤 1초 안에 나간 것처럼). 그런데 첫 가입 200 뒤 10초 동안 홈 API 와 프로필 사진 업로드가 하나도 없었습니다.
그래서 서버 200 을 받은 뒤 앱 안의 가입 완료 처리가 실패했고, onFailure 로 빠져 isSubmitting=false 가 되면서 버튼이 다시 눌린 것으로 보입니다. 이중 탭은 isSubmitting 으로 이미 막혀 있으니 원인이 아닙니다.
30일 동안 이 모양은 1건입니다.
앱에서 확인해 주실 것
서버에서는 앱 안을 볼 수 없어서 아래는 의심 지점입니다.
실패 원인 찾기: 11/03 12:23 KST 의 signup_failed 이벤트(error_code)와 Crashlytics·Observability 로그
mapAuthFailure 는 ApiException·IOException 만 바꿉니다. 그 밖의 예외는 UNKNOWN 이 되어 「로그인에 실패했어요」 토스트만 뜨고, 사용자는 다시 누르게 됩니다.
서버가 200 을 준 뒤의 실패는 「가입 실패」로 다루지 않기: authRepository.signup() 이 성공했다면 토큰은 이미 쓴 상태라, 같은 화면에서 다시 제출하면 반드시 INVALID_SIGNUP_TOKEN 이 됩니다.
saveSession 등 뒤 단계가 실패하면 가입 버튼을 다시 열지 말고 로그인 화면으로 보내 주세요. 소셜 로그인을 다시 하면 서버가 기존 계정으로 로그인시킵니다.
INVALID_SIGNUP_TOKEN 문구: 지금은 원인이 만료든 재사용이든 「시간이 초과됐어요」입니다. 위 경우 실제로는 가입이 끝난 상태라 「다시 로그인해주세요」 쪽이 정확합니다. (서버 계약상 만료·재사용·위조는 같은 코드로 옵니다.)
참고: 토큰 만료 1건 (11/01 20:32 KST)
직전 1시간 동안 짝이 맞는 소셜 로그인 없이 signup 이 와서 INVALID_SIGNUP_TOKEN 을 받았습니다. 30분 유효시간을 넘긴 것으로 보이고, 앱이 다이얼로그 → 로그인으로 처리한 것은 계약대로입니다. 12초 뒤 다시 로그인해 가입했습니다.
원하시면 signupTokenExpiresIn 으로 제출 전에 만료를 먼저 확인할 수 있습니다(선택).
서버 쪽
변경 없음. 가입 토큰 1회용·만료 30분은 계약 그대로입니다(POST /v1/auth/signup 설명 참고).
완료 기준
서버가 가입 200 을 준 뒤에는 같은 signupToken 으로 signup 이 다시 나가지 않는다.
서버 로그의 client_error code=INVALID_SIGNUP_TOKEN 이 만료 건 말고는 0 이 된다.
Activity