소셜 로그인은 데스크톱에서만 작동하고 모바일 기기에서는 작동하지 않음 (CSRF 감지됨)

안녕하세요,
제 Discourse 포럼에서 소셜 로그인(Google, Discord, LinkedIn) 관련 문제가 발생하고 있습니다:

  • 데스크톱에서는 모든 소셜 로그인이 정상적으로 작동합니다.

  • 모든 모바일 기기(iOS/Android, Safari/Chrome/Firefox)에서는 실패합니다.

모바일에서의 흐름은 다음과 같습니다:

  1. 소셜 로그인 창이 정상적으로 열립니다.

  2. 제 사이트로 리다이렉트된 후 홈페이지에만 도착하며, 로그인 상태가 아닙니다.

로그에는 항상 다음 내용이 표시됩니다:

(google_oauth2) Authentication failure! csrf_detected

또는

(discord) Authentication failure! invalid_credentials: invalid_request

이미 확인해 본 사항:

  • OAuth 설정이 정확함 (데스크톱에서는 정상 작동)
  • 기기의 쿠키/캐시 삭제
  • 인앱 브라우저가 아닌 실제 브라우저를 사용함
  • 어떤 모바일 브라우저를 사용하든 항상 CSRF detected 오류 발생

질문:
Discourse에서 소셜 로그인이 모바일 기기에서만 세션/쿠키를 잃고 csrf_detected 오류로 중단되는 원인은 무엇일까요?

도움 주시면 감사하겠습니다! :folded_hands:


이것은 표준 설치인가요? 아니라면 force_https가 활성화되어 있나요?

안녕하세요, 네, 표준 Discourse 설치입니다. (Hetzner 서버에 설치되어 있습니다.)

모바일 기기에서 csrf_detected 오류로 소셜 로그인(Google, Discord 등)이 실패하는 문제를 PC에서는 정상적으로 작동하는 현상에 대한 해결책을 찾았습니다.

원인은 제 테마에 있었습니다:

테마의 <head> 섹션에 포함된 사용자 정의 JavaScript 스크립트가 모바일 기기에서 페이지를 지속적으로 새로고침(window.location.replace)하고 있었습니다.

이러한 강제 리디렉션은 Google/Discord에서 콜백이 이루어진 후 세션 검증에 필요한 일시적인 CSRF 토큰을 파괴하고 있었습니다.

해결 방법:

테마에서 모바일 보기 강제 실행을 위한 전체 스크립트를 제거했습니다.

비슷한 문제를 겪고 있고 커스텀 테마를 사용하고 계신다면, 리디렉션을 유발하는 스크립트가 있는지 확인해 보시기 바랍니다. 제 경우에도 이것이 문제의 원인이었습니다!