Esperamos ter uma comunidade onde você só obtenha uma conta como parte do nosso processo de registro de produto, mas queremos tornar o conteúdo do fórum visível para que, se as pessoas estiverem tentando se autoajudar via Google, elas possam obter um resultado apropriado enquanto estão não autenticadas. (também para que possamos atingir algumas metas de SEO para nosso conteúdo)
Isso é possível ou é um sonho? Parece que não sou a primeira pessoa a fazer essa pergunta, ou a desejar essa capacidade de produto.
Então o problema é que alguns usuários estarão logados no seu Cognito e você não quer que eles recebam uma caixa de diálogo de login se tentarem responder? Pensei que com o Discourse Connect esse era o comportamento padrão.
Você pode tornar o site aberto para usuários anônimos e Google.
Em um mundo ideal, um usuário que visualiza o Discourse e tem uma conta deve estar logado o tempo todo, desta forma podemos capturar todos os dados de visualização dele. Farei com que, se um usuário do produto clicar em um link no produto para visualizar a comunidade, ele será autenticado, bem como quaisquer links que o usuário só deveria ver se estivesse autenticado em outro lugar (página da conta, por exemplo).
No entanto, se um usuário tentar autoatendimento via Google e acabar na comunidade, não podemos capturar esses dados até que ele tente interagir diretamente com a comunidade, mesmo que ele esteja autenticado em outro lugar em nosso sistema. Parece que a única maneira de resolver isso é com a configuração do site login_required ativada, que, se eu entendi corretamente, efetivamente torna o site privado.
Obrigado. Eu não sabia disso. Sou um CM tentando entender todos os detalhes de três produtos separados e isso está fritando meu cérebro tentando entender os detalhes de cada um! Espere ver mais alguns posts meus tentando resolver tudo, e agradeço a sua paciência.
No caso geral, isso será impossível (como você pode dizer se um usuário anônimo tem uma conta sem pedir para ele fazer login?). No entanto, deve ser possível detectar se um usuário já tem uma sessão ativa em seu site SSO.
Esse tópico é bem antigo, mas acho que o princípio ainda deve se aplicar. Basicamente, adicione uma URL com suporte CORS apropriado que retorne uma resposta JSON indicando se o usuário tem uma sessão ativa. Em seguida, adicione algum JS ao seu tema do Discourse que consulte essa URL e acione o processo SSO se uma sessão ativa existir.
Receio que a resposta geral ainda seja em grande parte a mesma da última vez
A especificação sobre a qual eu estava falando é OpenID Connect Session Management. Infelizmente, essa solução baseada em iframe está se tornando cada vez menos útil porque muitos navegadores agora bloqueiam cookies de terceiros por padrão. Agora, ela só funciona de forma confiável se seu provedor de identidade e o Discourse tiverem a mesma ‘origem’.
Como o @simonk disse, dependendo do seu provedor de identidade, pode ser possível implementar algo personalizado por meio de um componente de tema, mas não estou ciente de nenhuma solução geral que possamos adicionar ao próprio Discourse.
Você está absolutamente certo que clicar em ‘responder’ acionará o fluxo de login. E se o DiscourseConnect (ou qualquer outro provedor de login único) estiver sendo usado, o modal de login do Discourse será ignorado
No entanto, acho que o OP quer que as pessoas façam login automaticamente, sem que precisem clicar em ‘responder’ ou ‘login’. Com esse tipo de configuração, seria totalmente transparente para os usuários se moverem entre o site principal e a comunidade. Conseguimos isso para alguns clientes, mas foram implementações personalizadas que não podem ser facilmente generalizadas.
Para dar um exemplo de uma abordagem: se o seu fórum estiver em forum.example.com e o seu site principal estiver em example.com, o fórum poderá ler cookies de example.com. Assim, um componente de tema pode verificar a existência de um cookie e fazer algo como isto:
const cookie = require("discourse/lib/cookie").default;
if(cookie('name_of_example_com_auth_cookie') && !api.getCurrentUser()){
// O usuário tem um cookie de autenticação para example.com. Eles estão quase certamente
// logados lá, então vamos executar o fluxo de autenticação
window.location = "https://forum.example.com/auth/oidc"
}
(várias condições se aplicam aqui. por exemplo, o cookie não deve ser http_only, não deve ser um cookie apenas de host, etc.)
Esse é realmente o caso. É bom saber que é possível, mas personalizado.
Além disso, como eu não sabia que um usuário que clica em responder pularia a caixa de diálogo de login dependendo da implementação, isso aliviará muitas das minhas preocupações em primeiro lugar. Essa é a principal barreira de entrada que quero evitar, e fico feliz que possa ser implementada.
Claro, o nerd de dados em mim quer a versão ideal, e é possível que possamos aspirar a isso. Saber que é possível por enquanto é bom o suficiente. Obrigado mais uma vez a todos pelo tempo de vocês.