Discourse API와 SSO를 제공자로 사용하는 앱을 개발했습니다.
현재 해당 앱은 iframe 안에 표시되며, 소셜 로그인이 정상적으로 작동하려면 /login 페이지가 iframe 밖에서 새 브라우저 탭으로 열려야 합니다.
이 부분은 잘 작동하고 있습니다.
문제
새로운 사용자가 소셜 버튼을 통해 가입을 시도할 때, 소셜 사이트로 잘 리디렉션되고, Discourse로 돌아왔을 때 문제가 발생합니다. Discourse가 사용자명/이메일이 입력된 모달 대신 로그인 모달을 표시합니다.
가입을 완료하기 위한 모달을 보려면 로그인 모달을 닫고, 수동으로 가입 버튼을 클릭해야 합니다.
새로운 사용자의 경우에만 이러한 문제가 발생하며, 기존 사용자의 로그인은 정상적으로 작동합니다.
무언가를 놓친 건지, 아니면 Discourse가 적절히 처리하지 못하는 상황이 있는지 궁금합니다. 기술적으로는 동일한 과정이어야 할 것 같습니다.
데모를 보고 싶으시다면 말씀해 주세요. PM으로 짧은 영상을 보내드릴 수 있습니다(개인 정보가 포함되어 있음).
좀 더 정확히 말씀드리면, 이 앱은 Chrome 확장 프로그램에서 사용됩니다. 현재로서는 선택의 여지가 없어 iframe을 사용하고 있습니다. 하지만 여전히 iframe에서 프로그래매틱으로 브라우저의 새 탭을 /login 또는 /signup으로 여는 것과, 수동으로 탭을 열고 로그인/가입 버튼을 클릭하는 것 사이에 어떤 차이가 있는지 명확하지 않습니다.
이것은 Discourse에서 수정할 수 있는 문제인가요?
현재 우리는 Discourse를 SSO 제공자로 사용하고 있습니다. 다른 방법이 있을까요?
만약 있다면, 이 상황에서 로그인/가입을 구현하는 가장 좋은 방법은 무엇일까요?
저는 iframe 안에 Discourse를 임베드하는 것이 아닙니다. API를 사용하여 토픽 메시지를 표시하고 있습니다.
소셜 웹사이트가 iframe 안에 표시되는 것을 허용하지 않기 때문에, iframe 안에서 로그인/가입을 시도하는 것이 아닙니다. 그래서 사용자가 iframe 안의 버튼을 클릭하면 Discourse의 /login 페이지로 새 브라우저 탭이 열립니다.
기술적으로, 사용자가 로그인 버튼을 누르면 /session/sso_provider가 포함된 새 탭이 열립니다. return_sso_url에는 데이터를 처리하고 사용자 세션 정보를 저장한 후 창을 자동으로 닫기 위해 HTML을 응답하는 백엔드 URL이 포함됩니다. 이후 앱이 완료됨을 감지하면 자동으로 재로드되어 저장된 사용자 세션을 사용할 수 있게 됩니다.
앱이 iframe에 있지 않더라도 아마 동일한 일이 발생할 것입니다. 브라우저 확장 프로그램이므로 어쨌든 새 탭을 여는 것 외에는 선택지가 없습니다. 이 경우 로그인/가입을 위한 더 나은 방법이 있는지 궁금합니다.
수정: 데모를 첨부합니다(공개할 의도는 아니었지만, 문제를 보여주는 가장 짧은 방법이라서요. 그리고 제가 충분히 잘 설명하지 못한 것 같아서요) : snip, video removed, no one care anyway
수정2: API /session/sso_provider를 사용할 때만 발생하는 것 같습니다. Discourse URL을 직접 여는 경우(여전히 iframe에서)에는 문제가 발생하지 않는 것으로 보입니다.