우리는 제품 등록 과정의 일부로만 계정을 생성할 수 있는 커뮤니티를 운영하기를 원합니다. 하지만 포럼의 콘텐츠는 공개적으로 표시되기를 원합니다. 이렇게 하면 사람들이 구글을 통해 자체 해결을 시도할 때 인증되지 않은 상태에서도 적절한 결과를 얻을 수 있을 것입니다. (또한 우리 콘텐츠에 대한 SEO 목표를 달성할 수도 있습니다)
이것이 가능한가요, 아니면 불가능한 꿈인가요? 이 질문을 하거나 이러한 제품 기능을 원하는 사람이 저만이 아닌 것 같습니다.
이상적인 상황에서는 커뮤니티를 보는 사용자는 계정이 있다면 항상 로그인 상태여야 하며, 이렇게 하면 해당 사용자의 모든 시청 데이터를 수집할 수 있습니다. 저는 제품 사용자가 제품 내에서 커뮤니티를 보기 위해 링크를 클릭하면 인증되도록 만들 계획이며, 사용자가 다른 곳에서 인증되어 있을 때만 볼 수 있는 링크들(예: 계정 페이지)도 마찬가지입니다.
하지만 사용자가 Google을 통해 스스로 해결책을 찾다가 커뮤니티에 도착한 경우, 시스템의 다른 곳에서 인증되어 있더라도 사용자가 커뮤니티와 직접 상호작용을 시도하기 전까지는 해당 데이터를 수집할 수 없습니다. 이 문제를 해결하는 유일한 방법은 login_required 사이트 설정을 활성화하는 것인 것 같으며, 제가 이해한 바로는 이는 사실상 사이트를 비공개로 만드는 것과 같습니다.
감사합니다. 이 사실을 몰랐습니다. 저는 세 가지 서로 다른 제품의 모든 세부 사항을 이해하려는 CM(커뮤니티 매니저)인데, 각각의 구체적인 사항을 파악하려고 하니 머리가 녹아내리는 것 같습니다! 모든 것을 정리하기 위해 몇 가지 더 게시글을 올릴 예정이니, 인내심을 가져 주셔서 감사합니다.
일반적인 경우 이는 불가능합니다(로그인을 요청하지 않고 익명 사용자에게 계정이 있는지 어떻게 알 수 있겠습니까?). 그러나 SSO 사이트에서 사용자가 이미 활성 세션을 가지고 있는지 감지하는 것은 가능해야 합니다.
해당 주제는 꽤 오래되었지만, 원칙은 여전히 적용될 수 있다고 생각합니다. 기본적으로 적절한 CORS 지원을 갖춘 URL을 추가하여 사용자가 활성 세션을 가지고 있는지 여부를 나타내는 JSON 응답을 반환하도록 합니다. 그런 다음 Discourse 테마에 해당 URL을 쿼리하고 활성 세션이 존재하면 SSO 프로세스를 트리거하는 JS를 추가합니다.
제가 말씀드린 명세는 OpenID Connect Session Management입니다. 불행히도, 이 iframe 기반 솔루션은 많은 브라우저가 이제 기본적으로 제3자 쿠키를 차단하고 있기 때문에 점점 더 유용성이 떨어지고 있습니다. 이제 이 솔루션이 안정적으로 작동하려면 아이덴티티 제공자와 Discourse가 동일한 'origin’을 가져야만 합니다.
@simonk 님이 말씀하신 대로, 아이덴티티 제공자에 따라 테마 컴포넌트를 통해 커스텀 구현이 가능할 수 있지만, Discourse 자체에 추가할 수 있는 일반적인 솔루션은 제가 아는 한 없습니다.
‘답글’을 클릭하면 로그인 플로우가 트리거된다는 말씀이 완전히 맞습니다. 그리고 DiscourseConnect(또는 다른 단일 로그인 제공자)가 사용 중이라면 Discourse 로그인 모달은 건너뛸 것입니다
하지만 저는 OP가 ‘답글’이나 ‘로그인’을 클릭할 필요 없이 사람들이 자동으로 로그인되기를 원한다고 생각합니다. 그런 설정이라면 사용자가 메인 사이트와 커뮤니티 사이를 오갈 때 완전히 매끄러운 경험을 할 수 있습니다. 우리는 몇몇 고객에게 이를 구현해 주었지만, 이들은 쉽게 일반화할 수 없는 맞춤형 구현이었습니다.
한 가지 접근 방식의 예를 들어 보겠습니다. 포럼이 forum.example.com에 있고, 메인 사이트가 example.com에 있다면, 포럼은 example.com의 쿠키를 읽을 수 있도록 허용됩니다. 따라서 테마 컴포넌트는 쿠키의 존재 여부를 확인하고 다음과 같은 작업을 수행할 수 있습니다:
const cookie = require("discourse/lib/cookie").default;
if(cookie('name_of_example_com_auth_cookie') && !api.getCurrentUser()){
// User has an auth cookie for example.com. They are almost certainly
// logged in there, so let's run the auth flow
window.location = "https://forum.example.com/auth/oidc"
}
(여기에는 여러 조건이 적용됩니다. 예를 들어 쿠키는 http_only가 아니어야 하고, host-only 쿠키도 아니어야 합니다 등.)