잠깐 연결이 끊겼다고 계정을 지우지 않았다
세션 복원이 실패하면 원인을 가리지 않고 저장된 토큰과 알림 상태를 지우고 있었다. 서버가 거절한 경우만 정리하고, 장애에서는 오프라인 선택을 남기게 바꿨다.
태그
#인증 · 11개
세션 복원이 실패하면 원인을 가리지 않고 저장된 토큰과 알림 상태를 지우고 있었다. 서버가 거절한 경우만 정리하고, 장애에서는 오프라인 선택을 남기게 바꿨다.
비회원이 입양 신청서를 작성하고 로그인하면 입력값이 사라졌다. 짧게 살아 있는 신청 초안을 탭 저장소에 맡기고, 로그인 뒤 원래 공고에서 한 번만 함께 보내도록 바꿨다.
앱을 오래 켜 둔 뒤 화면을 다시 열면 여러 API가 동시에 401을 받았다. 각 요청이 토큰을 따로 갱신하면서 세션이 꼬였고, 갱신 작업 하나를 같이 기다리게 바꿨다.
비밀번호 찾기 응답이 계정 존재 여부에 따라 달랐다. 화면에는 늘 같은 답을 주고, 재설정이 끝나면 남은 링크와 로그인 세션을 한꺼번에 끊도록 손봤다.
가입 전에 만든 데이터를 로그인 뒤 합치는 재시도가 계정 전환을 따라갈 수 있었다. 처음 합치기를 시작한 이메일과 사용자 ID에 작업을 묶었다.
React Query 키에 사용자 구분이 없어서 계정을 바꾼 직후 이전 캐시가 재사용됐다. 익명과 계정별 scope를 키에 넣고 개인화 캐시만 골라 지웠다.
가입하지 않은 이메일을 알려주는 문구가 계정 조회 수단이 됐다. 주소가 있든 없든 같은 답을 주고 실제 계정에만 메일을 보내게 고쳤다.
앱의 세션만 지우고 서버에 남은 기기 등록은 그대로 두고 있었다. 인증 토큰을 없애기 전에 푸시와 위젯 연결부터 끊었다.
인증 초기화가 늦어지자 앱이 로딩 화면에서 꼼짝도 하지 않았다. 6초까지만 기다리고 무료 상태로 먼저 열어 주도록 바꿔 봤다.
여러 화면이 만료된 토큰으로 한꺼번에 요청하면서 갱신도 동시에 시작됐다. 첫 갱신 작업 하나를 나머지 요청이 함께 기다리게 바꿨다.
별도 메일 서버 없이 네이버 SMTP를 Worker에 연결했다. TLS 접속부터 한글 제목 인코딩, 본문의 점 처리까지 직접 챙긴 기록이다.