안녕하세요, 여러분! 제 포럼 사용자 중 한 명이 웹사이트에서 계정으로 로그인할 수 없어 다음과 같은 오류를 받았습니다. 다른 사용자 계정에는 문제가 없으며, 이 사용자만 해당 증상이 나타납니다. 포럼을 최신 버전으로 업데이트하면 해결될 줄 알았으나, 여전히 문제가 남아 있습니다.
혹시 원인에 대해 아시는 분이 계신가요? 도움이 되신다면 정말 감사하겠습니다.
로그인 설정이나 해당 사용자에 대해 특별한 점이 있나요? 이전에 관리자 계정에 관한 비슷한 오류를 본 적이 있지만, 더 많은 정보를 제공해 주실수록 좋습니다. ![]()
/logs에서 오류 메시지를 확인하고 계신가요?
답변해 주셔서 감사합니다!
/var/discourse/shared/standalone/log/rails에 있는 로그를 말씀하시는 건가요?
어떤 로그에 그런 오류가 기록되나요?
production.log인가요, 아니면 production_errors.log인가요?
두 번째 로그는 비어 있습니다.
말씀하신 것은 [YourSite]/logs에 있는 로그를 의미하신 건가요? 아니면 로그인 시도에 브라우저 콘솔에 어떤 내용이 표시되는지 확인해 보셨나요? 거기에 문제 해결에 도움이 될 수 있는 추가적인 세부 정보가 있을 수 있습니다.
해당 사용자는 일반(비스태프) 사용자이며, SSO가 활성화되어 있나요?
네, 맞습니다. SSO를 통해 모든 사용자가 로그인할 수 있을 것 같습니다. 포럼에 로그인할 때 계정과 비밀번호를 다시 입력할 필요가 없기 때문입니다. 웹사이트에서 포럼으로 바로 이동하게 됩니다.
콘솔에서 발생한 오류는 다음과 같습니다:
웹에서 발생할 수 있는 오류 로그는 다음과 같습니다:
ActiveRecord::RecordInvalid (validation failed: Primary email already adopted) app/models/discourse_connect.rb:270:in block in match_email_or_create_user' lib/distributed_mutex.rb:53:in block in synchronize’ lib/distributed
해당 사용자가 Discourse에서 사용 중인 이메일 주소가 메인 사이트에서 사용 중인 주소와 다른 것 같습니다. 확인해 주시겠어요?
네, 방금 Discourse 사용자 패널에 표시된 이메일과 저희 메인 사이트에 있는 이메일을 확인해 보았는데, 두 이메일이 동일합니다.
확인해 본 결과, 가능한 이유 중 하나는 상대방의 이메일이 실수로 차단 목록에 추가되었을 수 있다는 것입니다. /admin/logs/screened_emails 페이지에서 검색하여 해당 여부를 확인할 수 있습니다. 만약 목록에 있다면, 차단을 해제하는 것이 해결책이 될 수 있습니다.
(또한 /admin/logs/screened_ip_addresses에서 상대방의 IP 주소도 확인해 보시는 것이 좋습니다)
만약 해당 사항이 아니라면, SSO를 활성화하기 전에 상대방이 이미 포럼 계정을 가지고 있었을 가능성도 있습니다. 어떤 SSO를 사용하고 계신가요?
/admin/logs/screened_ip_addresses를 확인해 보았는데 비어 있습니다.
죄송하지만 말씀하신 내용을 이해하지 못하겠습니다. (“어떤 SSO를 사용 중이신가요?”) SSO의 종류가 여러 가지가 있나요?
Discourse Connect를 사용하셨는지, 아니면 다른 도구를 사용하셨는지 궁금했습니다. 또한 사용자 인증을 위해 어떤 시스템(예: WordPress)과 연동하셨는지요.
이 에러는 이전에 확인한 적 있습니다. 티켓팅 시스템에서 검색을 해보았습니다.
다음과 같은 조건이 충족될 때 발생합니다.
require activation이true로 설정되어 있을 때- 특정 이메일 주소를 가진 Discourse 사용자 U1이 있고, 외부 ID A가 있을 수 있을 때
- 동일한 이메일 주소를 가진 DiscourseConnect 제공자 측 사용자 U2가 있고, 외부 ID가 다를 때 (B)
사용자가 로그인하면 Discourse는 외부 ID B를 가진 사용자가 있는지 확인합니다. 해당 사용자는 존재하지 않습니다.
정상적으로 Discourse는 다음 단계로 이메일 주소를 기준으로 매칭을 수행하지만, require activation이 설정되어 있어 이메일 주소가 신뢰할 수 없는 것으로 간주됩니다. 따라서 이 단계를 건너뛰고 사용자 U1과 연결되지 않습니다. 그렇게 되면 계정 탈취가 가능해질 수 있기 때문입니다.
따라서 Discourse는 새 사용자를 생성하기로 결정합니다. 그러나 해당 이메일 주소로 사용자 U1이 이미 존재하기 때문에 이 과정이 실패합니다.
이메일 주소가 존재하지만 신뢰할 수 없는 이메일인 경우 더 나은 에러 메시지가 표시되면 좋겠습니다. 또한 왜 일반적인 Rails 에러가 표시되는지 확실하지 않습니다.
해결 방법:
- DiscourseConnect 제공자 측의 이메일 주소가 인증되어 신뢰할 수 있다면,
require activation을false로 설정하세요.
또는 - 사용자 U1의 외부 ID를 B로 변경하세요
또는 - 사용자 U1의 이메일 주소를 다른 것으로 변경하세요
"the change you wanted was rejected"라는 텍스트를 추가하여 이 에러를 검색할 때 해당 토픽이 찾히도록 했습니다.
네, 우리는 Discourse connect를 사용 중이며, 우리 사이트에 연결되어 있습니다.
상세한 답변을 정말 감사합니다! 저희 사이트에서는 사용자가 로그인할 때 이메일 주소를 검증합니다. 따라서 먼저 방법 1로 문제를 해결해 보겠습니다. 하지만 관리자 설정에서 “이메일 인증 필수” 옵션을 찾을 수 없었습니다.
SSO 과정에서 반환되는 매개변수입니다. https://meta.discourse.org/t/disable-email-verification-for-sso/148086/4를 참조하세요.
WP Discourse 플러그인을 인증에 사용하는 사이트의 경우, 사이트 관리자는 사용자 설정 페이지에서 개별 사용자의 이메일 주소를 인증된 상태로 표시할 수도 있습니다:
이것은 사이트의 모든 사용자에게 이메일 인증을 비활성화하는 것보다 더 안전하고 쉽습니다.
이것이 언제부터 발생하기 시작했는지 궁금합니다. 당신이 설명하는 시나리오는 이 오류 메시지를 생성하는 데 사용되었던 것으로 꽤 확신합니다: “계정에 문제가 있습니다. 사이트 관리자에게 문의하십시오.”
여기에는 이 오류를 반환하는 실패한 Rails 검증기의 또 다른 사례가 있으며, 이미 6년 6개월이 지난 것입니다. DiscourseConnect 맥락에서 이것은 실제로 지난 몇 달 동안만 목격한 것입니다.
저희는 discourse 이미지를 사용 중이므로, env:에 require_activation=true를 추가하면 될까요?
도와주셔서 감사합니다. 하지만 저희는 WP를 고소하지 않습니다. 저희는 discourse 도커 이미지를 사용하고 있습니다. app.yml 파일의 env: 부분에 require_activation=true를 추가하는 것이 올바른 설정 방식인가요?
아니요, 이전에 게시된 내용처럼 Login error - #17 by RGJ 를 참고해 주세요. 이 파라미터는 사용자별로 전달해야 합니다. 커스텀 구현인 경우 서버 측 코드를 수정해야 합니다.


