음. 사람들이 포럼을 사용하고 주제를 읽는 등, 어떤 액션(예: create_post, create_topic, edit_post 등)을 생성하면 웹훅을 통해 메시지를 받게 됩니다. 이는 메인 사이트가 사용자가 여전히 활동 중임을 알 수 있게 해주어 세션의 ‘마지막 클릭’ 값을 업데이트하고 로그아웃을 방지할 수 있게 합니다. 당연히 그래야 하는 것이죠. 모두 잘 작동합니다.
하지만, 만약 멤버가 그저 메시지를 읽기만 하는 동안이라면… 그들이 무언가를 할 때마다 Discourse의 유휴 시간이 재설정됩니다(이것은 좋은 점이지만), 제 메인 사이트는 사용자가 활동 중임을 나타내는 웹훅 메시지를 전혀 받지 못합니다. 따라서 1시간 동안 아무 활동도 없으면(포럼에 갔다가 컴퓨터를 떠나온 것처럼 보임) 메인 사이트는 세션이 만료된 것으로 간주하고 로그아웃을 시킵니다.
여기 논리에 구멍이 있는 것 같습니다. 올바른 SSO 구현을 위해서는, 사용자가 활동 중인지(단순히 읽기만 하더라도) Discourse가 알려주는 방법이 있어야 하지 않나요? 어쩌면 멤버가 활동 중이지만 다른 웹훅 메시지를 생성하지 않은 경우, Discourse가 5분마다 핑(ping)을 보내야 할지도 모릅니다.
아니면, 제 사이트가 사용자가 시간 초과된 것으로 판단할 때 Discourse를 호출하여 해당 사용자가 거기에 있는지 물어보는 것이 좋을까요? 그렇게 할 수 있는 방법이 있을까요? (Is there an endpoint to check if a user is logged in - #3 by pfaffman 를 보았지만, 이것이 제가 원하는 것인지 확신이 서지 않으며, /session/current.json은 API 문서에 나와 있지 않습니다.) 하지만 그러면 API 호출량이 엄청나게 늘어날 텐데요-- 제 사이트에서는 비활성으로 인해 매 분당 약 15~20명의 사용자를 로그아웃시키므로, 각 사용자를 위해 호출해야 합니다(그리고 로컬에 Discourse ID 캐시가 없다면 호출이 여러 번 발생할 수도 있습니다).
여러분, 어떻게 생각하시나요? 조언을 부탁드립니다.