O Usuário A faz login no meu site e clica em ‘Fóruns’. Ele é redirecionado para o Discourse, que faz uma chamada de volta ao meu site via SSO, autenticando-o e fazendo com que ele entre automaticamente no Discourse. Ótimo, funciona perfeitamente.
Depois de um tempo, o Usuário A se afasta do computador e sua sessão expira automaticamente. Ele não clica especificamente em ‘sair’ nem no meu aplicativo nem no Discourse.
O Usuário B faz login no meu site no mesmo dispositivo, clica para acessar os fóruns e, como o Discourse ainda tem o Usuário A logado, não solicita o SSO, já que a sessão do Discourse ainda está ativa. Agora o Usuário B está logado no Discourse como o Usuário A. :-\
Certo, mas como posso fazer isso se o usuário “se afastou” do computador e a sessão expirou? Talvez isso seja mais uma questão de PHP (que é com o que meu site principal foi escrito)…
Você poderia esclarecer o que você quer dizer com isso? Qual é o tempo de sessão do seu aplicativo? Como você está lidando com a expiração da sessão lá?
O Discourse possui uma configuração de idade máxima da sessão que, por padrão, está definida para 1440 horas, ou seja, 60 dias.
A versão resumida é que, se você não sabe que o usuário no computador mudou, não há nada que você possa fazer facilmente para evitar isso. Você poderia reduzir o tempo de sessão ou chamar periodicamente do seu aplicativo para fazer o logout dos usuários, mas, nesse caso, se seus usuários estiverem no computador por períodos mais longos, eles acabarão tendo que passar novamente pelo fluxo de autenticação.
O Discourse pode estender qualquer fluxo de login e sessão que você esteja usando atualmente, mas sem mais informações sobre o mencionado acima, é difícil identificar exatamente onde está o problema e quais oportunidades existem.
Obrigado pela sua resposta! Percebi que esse problema, no final das contas, trata-se de gerenciar o usuário no site principal.
Se o usuário fizer logout manualmente no site principal, então preciso chamar o Discourse (via API) para fazê-lo fazer logout lá também.
E se o usuário não fizer logout, mas a sessão dele expirar, preciso chamar o Discourse para fazê-lo fazer logout lá ao mesmo tempo.
E, finalmente: quando um usuário fizer logout do Discourse usando a opção “sair” lá, preciso capturar esse evento (via webhook) e fazê-lo fazer logout no meu site também.