또한 이 Discourse 사이트의 상위 도메인에 호스팅된 프로덕션 테스트 사이트도 있습니다. 프로덕션 플로우를 테스트해 보실 수 있도록 Discourse Connect URL을 "https://domainsite.com/login"으로 업데이트했습니다. Google 제공자로 로그인하여 테스트해 보셔도 됩니다. 인스펙트 콘솔 로그에서 제가 출력한 에러와 응답을 보실 수 있는데, 상태 코드는 404입니다.
현재 저는 POC(개념 증명) 단계만 진행 중이므로, 괜찮으시다면 이메일 주소를 알려주세요. 그러면 제 Discourse 사이트에서 설정을 꼼꼼히 조사할 수 있도록 관리자 권한을 부여해 드리겠습니다. 다시 한번 시간 내어 도와주셔서 정말 감사드립니다.
확신이 안 서는 부분은 sig와 sso뿐인데, 코드를 보면 제가 제대로 하고 있는 건가요?
이 부분 외에는 문제없습니다. api-key는 모두에게 생성하는 것과 시스템에만 생성하는 것 두 가지를 모두 시도해 봤는데, 결과는 동일했습니다. 가능하시다면 Postman이나 Angular 기반의 동작하는 샘플을 제공해 주시겠습니까?
Angular 앱에는 익숙하지 않지만, 클라이언트에서 Discourse로 인증된 API 요청을 보내려는 것으로 보입니다. Discourse 코드에서 정확히 어디에서 그런 일이 일어나는지는 모르지만, 제 이해로는 클라이언트에서发出的 관리자 API 요청은 Discourse에서 차단됩니다. 이는 클라이언트에 API 키를 노출하지 않고 요청을 수행할 방법이 없기 때문입니다. 이와 관련하여, 지금 바로 API 키를 변경해야 합니다.
알려주셔서 감사합니다.
한 발짝 더 나아간 것 같습니다.
저도 Postman으로 요청을 보내려고 시도하고 있습니다.
Discourse가 프론트엔드에서 API 키를 사용한 호출을 거부했기 때문에, 클라이언트 측의 mode: 'no-cors' 설정이 차단 원인이 된다면, Postman으로 보내는 것이 괜찮을 것 같다는 생각이 드는데, 맞습니까? 하지만 결과는 동일합니다.
주된 질문이 external_id 필드에 관한 것 같습니다. DiscourseConnect 페이로드에 external_id 필드를 설정해야 합니다. 이 필드의 값은 사용자와 연관되며 절대 변경되지 않는 문자열이어야 합니다. 애플리케이션에 사용자 테이블이 있다고 가정합니다. 해당 테이블에서 사용자 항목의 기본 키를 external_id 필드의 값으로 사용하는 것이 좋습니다.
웹사이트에서 DiscourseConnect 인증을 추가하기 전에 사용자가 이미 Discourse 계정을 생성한 경우, 사용자가 DiscourseConnect를 통해 처음 로그인할 때 Discourse는 DiscourseConnect 페이로드에 포함된 이메일 주소를 기반으로 사용자를 찾으려고 합니다. 사용자를 찾은 후, Discourse 데이터베이스에는 DiscourseConnect 페이로드에서 가져온 external_id가 포함된 레코드가 추가됩니다. 사용자가 다음에 로그인할 때는 이메일 주소가 아닌 external_id로 찾게 됩니다. (참고: DiscourseConnect 페이로드의 require_activation 매개변수를 true로 설정한 경우 이 동작은 작동하지 않습니다.)
Discourse는 대부분의 엣지 케이스에 대해 좋은 폴백 메커니즘을 제공합니다. 사용자가 여러 계정을 보유하거나 이메일 주소와 관련된 문제로 인해 오류가 발생할 수 있습니다. 이러한 사례를 처리하는 방법에 대한 세부 사항은 여기에서 확인할 수 있습니다: Debug and fixing common DiscourseConnect issues.
수년간 DiscourseConnect를 WordPress를 제공자(provider)로 사용하여 성공적으로 운영해 왔으며, Discourse나 WP 설정은 변경한 적이 없습니다. 그런데 오늘 새로운 동작으로 보이는 현상을 발견했습니다.
로그아웃하면 예전에는 WordPress 로그인 화면으로 이동했습니다.但现在는 Discourse 로그인 화면으로 이동합니다. Discourse 화면에서 로그인하려고 하면 'Unknown Error’가 표시되지만, 문제는 아예 그 화면에 있어서는 안 된다는 것입니다. WP 로그인 화면으로 가야 합니다.
참고로 로컬 로그인은 활성화되어 있습니다(WP를 사용 중인데 왜 활성화되어 있는지 모르겠습니다). 로컬 로그인을 비활성화하고 로그인하려고 하면 사용 가능한 로그인 방법이 없다고 표시됩니다. 따라서 WP 연결을 인식하지 못하는 것 같습니다. 하지만 다시 한번 강조하지만, 양쪽 설정은 변경한 적이 없습니다. Discourse Connect가 활성화되어 있는지, 연결 URL이 올바른지, 시크릿이 양쪽에서 동일한지 확인했습니다.
3.5.0.beta5-dev 버전으로 최신 상태를 유지하고 있습니다. 또한 WP Discourse 플러그인도 최신 버전입니다.
DiscourseConnect SSO를 사용하여 이름이나 avatar_url을 제거하는 것이 불가능한 것 같습니다. 필드를 빈 문자열로 설정해 보았지만(예: avatar_url=이 base64 sso 매개변수에 포함되는 것을 확인했습니다), 코드에서는 빈 필드를 무시하는 것 같습니다.
제 시스템에서는 이름과 프로필 사진이 선택 사항이지만, 현재 작동 방식으로는 한 번 설정된 후에는 삭제할 수 없고 교체만 가능합니다. 제가 무언가를 잘못하고 있는 건가요? (아니라면, 이 문제를 수정할 수 있을까요?)
위에서 @markschmucker, @jimkleiber, @marco.palumbo가 설명한 것과 동일한 로그인 리디렉션 문제를 겪고 있습니다. 이 문제는 몇 주 전에 발견했으며, 5월 중에는 정상적으로 작동했었던 것을 알고 있었습니다. 위에 작성된 내용을 읽은 결과, 이 문제가 5월 이후의 어떤 업데이트에서 Discourse에 도입된 회귀(regression)라는 확신이 생겼습니다. 왜냐하면 우리 모두에게 동시에 문제가 발생했고, 우리는 모두 정상 작동하는 SSO 코드를 가지고 있었으며, 서로 공유하는 SSO 코드가 없기 때문입니다.