Patreon으로 계정을 인증하는 중 오류 발생

오래전부터 우리는 Discourse에서 Patreon으로 로그인하기 위해 Patreon 플러그인을 API V1과 함께 사용해 왔습니다. 공식 Discourse Patreon 플러그인 문서에서 권장하는 설정이 바로 이 방식입니다: Configure Patreon integration with Discourse

Screenshot 2025-10-28 at 11.59.15 AM

하지만 Patreon은 이미 수년 전부터 V1을 지원하지 않습니다. 이로 인해 constantly 오류가 발생하고, 데이터가 완전히 동기화되지 않으며, 최근에는 아예 작동하지조차 않았습니다.

문제는 Patreon이 지원하는 API V2로 전환하면 사용자 인증이 실패한다는 점입니다. 사용자가 Patreon으로 로그인 버튼을 클릭하고 API v2가 자신의 Patreon 계정에 연결하도록 허용하면 다음과 같은 오류가 발생합니다:

죄송합니다. Patreon 계정을 인증하는 동안 오류가 발생했습니다. 다시 시도해 주세요.

공식 Patreon 플러그인 Discourse 문서에도 API v2가 이러한 인증 오류를 유발할 수 있다고 명시되어 있습니다. 즉, v2는 사용할 수 없다는 뜻입니다.

다행히도 API v2를 작동시키는 우회 방법을 찾았습니다. 현재 권장되는 API v1이 완전히 깨져 있으므로, 이 해결책은 공식 문서에 추가되어야 합니다.

해결 방법

해결 방법은 커스텀 OAuth2를 생성하는 것입니다. Patreon 플러그인의 ‘Patreon으로 로그인’ 버튼을 사용하는 대신, 우리가 만든 커스텀 로그인 버튼을 사용하도록 하여 자체 OAuth를 통해 Patreon과 인증을 수행합니다.

1단계: Patreon에 다음 리다이렉트 URI를 추가하세요.

  • https://<your_discourse_server_link>/auth/oauth2_basic/callback

  • https://<your_discourse_server_link>/auth/patreon/callback

2단계: Discourse에서 Admin > Login & Authentication > OAuth2로 이동하여 다음을 구성하세요:

  • oauth2_enabled: true

  • oauth2_client_id: <your Patreon client id>

  • oauth2_client_secret: <your Patreon client secret>

  • oauth2_authorize_url: https://www.patreon.com/oauth2/authorize

  • oauth2_authorize_signup_url: (비워 둡니다)

  • oauth2_token_url: https://www.patreon.com/api/oauth2/token

  • oauth2_callback_user_id_path: (비워 둡니다)

  • oauth2_callback_user_info_paths: email

  • oauth2_token_url_method: POST

  • oauth2_callback_user_info_paths: email

  • oauth2_fetch_user_details: true

  • oauth2_user_json_url: https://www.patreon.com/api/oauth2/v2/identity?include=memberships&fields[user]=email,full_name,vanity

  • oauth2_json_user_id_path: data.id

  • oauth2_json_name_path: data.attributes.full_name

  • oauth2_json_username_path: data.attributes.vanity

  • oauth2_json_email_path: data.attributes.email

  • oauth2_json_email_verified_path: (비워 둡니다)

  • oauth2_email_verified: true (프롬프트를 줄이기 위해 제공자를 신뢰) 일부 후원자가 이메일이 없는 경우, 가입 프롬프트가 표시되도록 이 값을 false로 설정하세요.

  • oauth2_email_verified: true

  • oauth2_send_auth_header: true

  • oauth2_send_auth_body: true

  • oauth2_debug_auth: true

  • oauth2_authorize_options: scope

  • oauth2_scope: identity identity[email] campaigns campaigns.members

  • oauth2_button_title: Patreon으로 로그인

  • oauth2_allow_association_change: false (권장)

3단계: Discourse 코어 로그인 제어에서 다음을 구성하세요:

  • enable sso: false

  • patreon login enabled: false (Patreon 버튼이 두 개 표시되는 것을 방지; 플러그인은 동기화 목적으로만 유지)

  • allow new registrations: 선택:

    • true: 새로운 후원자가 계정을 만들 수 있도록 허용

    • false: 기존 Discourse 사용자만 로그인 가능

  • invite only: 테스트 중에는 false

  • must approve users: 테스트 중에는 false

  • session_cookie_domain: (비워 둡니다)

4단계: Discourse yml 파일에서 네트워크 및 호스트 관련 다음을 구성하세요.

  • app.yml의 DISCOURSE_HOSTNAME: <your_discourse_server_link>

  • force_https: true

5단계: 변경 사항을 적용하기 위해 앱을 다시 빌드하세요:

cd /var/discourse
./launcher rebuild app

결과:

이제 API v2에서 실제로 작동하며 Patreon 사용자 그룹을 올바르게 동기화하는 자체 OAuth2 ‘Patreon으로 로그인’ 버튼을 가질 수 있습니다.

1개의 좋아요