# #146 원격 링크 로그인 세션/이력 불일치 대응 ## 요약 - Ory 링크 로그인은 실제로 `/api/v1/auth/login/code/verify` 또는 `/api/v1/auth/login/code/verify-short` 경로를 사용합니다. - 기존에는 `verifyOnly`가 `/api/v1/auth/magic-link/verify`에만 적용되어, 링크를 클릭한 기기에서 세션이 발급되는 문제가 있었습니다. - 인증수단 표기는 loginId 기반 추론에 의존해 SMS 요청이 Email로 표시되는 문제가 있었습니다. ## 원인 - verify-only 적용 범위가 magic link에 한정되어 있었고, Ory 코드 기반 경로는 세션을 즉시 발급했습니다. - audit 로그의 인증수단 표기는 request_body/loginId 기반 추론만 사용했습니다. ## 변경 사항 ### 1) verify-only 범위 확장 - `/api/v1/auth/login/code/verify`, `/api/v1/auth/login/code/verify-short`에 `verifyOnly` 지원 추가 - verify-only일 때는 승인 상태만 저장하고 세션 발급은 Polling(Desktop)에서 수행 ### 2) Polling 시 세션 발급 주체 정리 - 승인 상태(`status=approved`)는 **요청한 기기(A)**에서만 세션 발급 - Ory 코드 플로우는 Polling 시점에 `VerifyLoginCode`를 수행해 세션 생성 ### 3) 인증수단 표기 개선 - `pendingRef` 기준으로 `login_method`(sms/email), `login_flow`(code/link) 저장 - audit 로그에 해당 메타를 기록하여 SMS/Email, 코드/링크 구분을 명확히 표시 - verify-only 요청 로그는 타임라인에서 제외 ## 영향 범위 - Backend: 링크 로그인 승인/세션 발급 경로 변경 - Front: verify-only 플래그 전달 확장 - 문서: auth-flow/test-plan 업데이트 ## 테스트 계획 (요약) - Desktop에서 링크 요청 → Mobile에서 링크 클릭(verifyOnly) → Desktop Polling으로 세션 발급 - Mobile 단말에서 세션/로그인 이력 미생성 확인 - 인증수단 표기(SMS/Email) 정확성 확인 - 코드/링크 만료/재사용 시나리오 점검