상태: 임시 완화 조치만 적용됨 (근본 해결 아님)

증상

구글 로그인 완료 후 브라우저 뒤로가기 → 같은 구글 계정 다시 선택 시, inote-server-5a63.onrender.com/?error=state_mismatch에 raw JSON 404가 뜸.

원인 (better-auth 소스로 직접 확인)

  1. OAuth state는 CSRF 공격 방지용 1회용 토큰 — 로그인이 한 번 성공하면 DB(verification 테이블)에서 즉시 삭제됨
  2. 뒤로가기로 보이는 "계정 선택" 화면은 구글 자신의 페이지라서, 거기서 다시 로그인을 시도하면 이미 삭제된 옛날 state 값을 그대로 재사용해서 콜백을 보냄
  3. 서버가 그 state로 DB를 조회 → 없음 → state_mismatch 에러
  4. 결정적 문제: 이 특정 에러(verification not found)는 better-auth 내부 코드상 errorURL을 아예 안 담고 던짐 (데이터가 이미 삭제돼서 복구할 게 없음) → 우리가 로그인 시작 시 아무리 errorCallbackURL을 정확히 넘겨도 무시되고, 서버의 전역 기본값(${baseURL}/error, 즉 백엔드 자기 자신)으로 떨어짐

"히스토리로 원래 앱을 알 수 없나?" 검토 → 불가능

지금까지 적용한 것 (임시 완화, Option A)

inote-server/src/auth/auth.ts:

onAPIError: {
  errorURL: process.env.AUTH_ERROR_FALLBACK_URL ?? '<http://localhost:3011/login>',
},

미해결로 남아있는 것 (다음에 처리)