OAuth2를 사용하여 제공자와 Discourse를 연결할 커뮤니티 포털을 구축하고 있습니다. 이메일 로그인 시 해당 이메일이 커뮤니티에 초대된 경우에만 허용하고 싶습니다(따라서 가입 버튼은 없어야 합니다). 반면, 모든 OAuth2 로그인은 허용하고 싶습니다.
OAuth2/로그인 설정으로 이를 해결하는 방법을 찾지 못하고 있습니다. 이것이 가능한가요? 기본적으로 OAuth2에 대해 가입 설정을 오버라이드하고 싶습니다.
OAuth2를 사용하여 제공자와 Discourse를 연결할 커뮤니티 포털을 구축하고 있습니다. 이메일 로그인 시 해당 이메일이 커뮤니티에 초대된 경우에만 허용하고 싶습니다(따라서 가입 버튼은 없어야 합니다). 반면, 모든 OAuth2 로그인은 허용하고 싶습니다.
OAuth2/로그인 설정으로 이를 해결하는 방법을 찾지 못하고 있습니다. 이것이 가능한가요? 기본적으로 OAuth2에 대해 가입 설정을 오버라이드하고 싶습니다.
초대 전용만 켜면 될 것 같습니다. 그렇게 했는데도 원하는 대로 동작하지 않나요?
그러면 그냥 활성화하면 되나요?
지금까지 무엇을 시도했고, 어떤 부분이 기대와 다른가요?
좋은 질문입니다. 제가 처음 시도한 것이 바로 그것이었어요. (OAuth 플로우 이후에) 이런 현상이 발생합니다:
다음으로 “새로운 가입 활성화” 옵션의 체크를 해제해 보았습니다:
이미지를 올릴 수 없습니다(신규 사용자라) 하지만 "현재 새 계정 가입이 허용되지 않습니다."라는 메시지가 표시됩니다.
이 문제를 해결할 다른 옵션이 있는지 잘 모르겠습니다. 수많은 조합을 시도해 보았지만(여기에 모두 나열할 수는 없지만), 아직까지 제대로 작동하는 결과를 찾지 못했습니다.
제 의도가 제대로 전달되지 않은 것 같습니다. OAuth2 로그인 플로우는 정상적으로 작동하고 있지만, 새로운 가입을 비활성화한 채로 OAuth2를 활성화해 두기를 원합니다. OAuth2와 이메일 가입 설정이 서로 묶여 있는 것 같아서, 이메일 가입은 비활성화한 채로 OAuth2만 "그냥 활성화"할 수 없습니다.
초대를 받지 않은 사용자가 로그인하려고 할 때 어떤 일이 일어나기를 원하시나요?
아! 초대 링크에 응답하려고 할 때 사용자가 보는 것이 이것이라는 말씀이시군요?
초대를 받은 사람만 허용하고, 그 사람들을 Clove로 로그인하도록 강제하기를 원하시는 것이 맞죠? 예시에서 그런 일이 일어난 것 같습니다.
초대 전용 설정과 Clove를 제외한 모든 로그인 유형을 비활성화하는 것이 원하시는 결과를 가져올 것이라고 생각합니다. Discourse 계정이 없는 사용자는 표시되는 “초대 전용” 대상을 볼 것입니다. 초대받은 사용자는 Clove-oauth를 통해 로그인할 수 있어야 합니다.
목표를 더 잘 전달하기 위해 추가 설명이 도움이 될 수 있습니다:
저는 세 가지 유형의 사용자가 있는 반공개(semi-private) 커뮤니티를 구축하고 있습니다: 스태프(이메일 로그인), 애플리케이션 사용자(OAuth2를 통해 제공되는 SSO), 특별 게스트(이메일, 애플리케이션 사용자는 아님). 특별 게스트에게는 이메일 로그인을 허용하되 초대장이 필요하도록 하고, OAuth2 사용자는 “신뢰할 수 있는” 사용자로 간주하여 초대장이 필요 없도록 하기를 원합니다. 그 이유는 OAuth2를 성공적으로 수행하는 데 필요한 계정을 보유하고 있다는 것 자체가 신뢰할 수 있음을 의미하기 때문입니다.
이메일 기반 로그인에 초대장 설정은 제대로 작동하지만, 이 경우 OAuth2 로그인도 초대장이 필요하도록 되어 있어 문제가 발생합니다. OAuth2 사용자는 초대장이 필요하지도 않고 초대장을 보지 않아도 됩니다. SSO 계정을 보유하고 있다는 사실만으로 신뢰할 수 있는 사용자이기 때문입니다.
이 설명이 문제를 더 잘 이해하는 데 도움이 되나요?
제가 빠져 있던 부분이 바로 그거였네요!
확신은 없지만, external auth skip create confirm이 찾으시는 기능일 것 같습니다. 설명에는 SSO만 언급되어 있지만, 이제 oauth에서도 작동한다고 생각합니다. 다른 누군가가 oauth2 설정에서 생성 다이얼로그를 건너뛰도록 사이트를 설정하는 것을 도와준 적이 있는데, 그때 이 옵션이 핵심이었습니다.
아, 그래. 아, 젠장. 다음 추측은 oauth2 플러그인을 포크해서 초대 전용 설정을 오버라이드해야 할 것 같다는 거야.
@pfaffman, 감사합니다. 그게 제가 받아들여야 할 것 같네요. 호스팅된 Discourse에서는 불가능할 것 같은데, 맞나요? 만약 그렇다면 다른 방법을 찾아봐야 할 것 같습니다.