사용자 정보를 모를 때 로그아웃하는 방법?

자, 간단한 시나리오를 하나 상상해 보세요:

  1. 사용자 A가 내 사이트에 로그인한 후 사이트의 '포럼’을 클릭합니다. 그러면 Discourse로 리디렉션되며, Discourse가 SSO를 통해 내 사이트로 콜백을 보내 사용자 A가 인증되어 Discourse에 자동으로 로그인됩니다. 완벽하게 잘 작동합니다.

  2. 잠시 후, 사용자 A가 컴퓨터를 떠나면 세션이 자동으로 만료됩니다. 사용자 A는 내 앱이나 Discourse에서 명시적으로 로그아웃을 클릭하지 않았습니다.

  3. 사용자 B가 같은 기기에서 내 사이트에 로그인하고 포럼으로 이동하려고 클릭합니다. Discourse에는 여전히 사용자 A가 로그인되어 있으므로, Discourse 세션이 로그인 상태이기 때문에 SSO를 요청하지 않습니다. 이제 사용자 B는 Discourse에서 사용자 A로 로그인된 상태가 됩니다. :-\

이 시나리오를 어떻게 처리할 수 있을까요?

감사합니다,
Eric

API 호출을 연결하여 discourse를 자동으로 로그아웃할 수 있습니다:

맞아요, 그런데 사용자가 컴퓨터에서 자리를 비웠고 세션이 만료된 상태라면 어떻게 해야 할까요? 아마 이 질문은 PHP 쪽에 더 가까운 것 같습니다(제 메인 사이트는 PHP로 작성되어 있거든요)…

이 트릭은 여전히 작동해야 합니다:

@riking 죄송합니다, 궁금한 점이 하나 있었습니다.

auth0 같은 서비스는 Discourse에서 자동 로그아웃을 어떻게 처리하나요?

이 부분에 대해 좀 더 구체적으로 설명해 주실 수 있을까요? 앱의 세션 길이는 얼마인가요? 거기서 세션 만료를 어떻게 처리하고 있나요?

Discourse에는 기본적으로 1440시간, 즉 60일로 설정된 maximum session age(최대 세션 수명) 설정이 있습니다.

간단히 말하면, 컴퓨터를 사용하는 사용자가 바뀌었는지 알 수 없는 상황에서는 이를 쉽게 방지할 수 있는 방법이 없습니다. 세션 길이를 줄이거나, 앱에서 주기적으로 호출하여 사용자를 로그아웃시킬 수는 있지만, 그렇게 하면 사용자가 컴퓨터를 더 긴 시간 동안 사용하게 될 때 인증 플로우를 처음부터 다시 거쳐야 하는 불편함을 겪게 됩니다.

Discourse는 현재 사용 중인 로그인 및 세션 플로우를 확장할 수 있지만, 위에서 언급한 사항에 대한 추가 정보가 없으면 문제가 정확히 어디에 있는지, 그리고 어떤 기회가 있는지 파악하기 어렵습니다.

답변 주셔서 감사합니다! 이 문제는 결국 메인 사이트에서 사용자를 관리하는 것과 관련이 있다는 걸 깨달았습니다.

사용자가 메인 사이트에서 수동으로 로그아웃하면, Discourse에도 로그아웃을 시키기 위해 API를 호출해야 합니다.

그리고 사용자가 로그아웃하지 않고 세션이 만료되는 경우에도, Discourse에서 동시에 로그아웃을 처리하기 위해 API를 호출해야 합니다.

마지막으로, 사용자가 Discourse에서 "로그아웃"을 선택할 경우, 해당 이벤트를 웹훅으로 받아서 제 사이트에서도 로그아웃 처리를 해야 합니다.

아, 통합 개발이네요!