Login exigido por país

Olá :waving_hand:

Estou procurando uma maneira de exigir login no site por país. Encontrei este plugin Geo Blocking plugin que provavelmente é o mais próximo do meu caso de uso, mas Ruby está bem fora do meu alcance no momento… ainda. Acho que esse plugin pode ser modificável para conseguir essa forma de habilitar login required para países específicos e redirecionar para /login?

Obrigado por qualquer conselho! :slightly_smiling_face:

3 curtidas

Olá :waving_hand:

O principal motivo pelo qual tive que fazer essa alteração são novas regulamentações legais específicas do país que afetam meu site. Meu site e o assunto estão disponíveis apenas para adultos com 18 anos ou mais. Mas eu não queria quebrar o SEO. Então, a primeira coisa que pensei foi tornar o site obrigatório o login em um país específico, dessa forma o bot do Google e outros podem rastrear o site em outros países. A exigência de login completa não parece ser uma boa opção, pois bloqueia todo o site e seu conteúdo.

Decidi torná-lo do lado do cliente, o que parece ser outra boa opção, então usei o login obrigatório de uma forma suave do lado do cliente. Isso parece suficiente no momento, então comecei com isso.

:warning: Acho que não é a melhor ideia compartilhar todo o código que uso aqui, pois provavelmente não é o melhor para outros casos de uso e provavelmente não é a versão final e, claro, modifica muito o sistema de login.


Todo o processo agora funciona com dois componentes de tema separados que podem ser mesclados no futuro.

Mas antes de fazer isso, tive que modificar algumas outras coisas. Primeiro de tudo, os bots selecionados que queremos são isentos de todo esse processo e ainda podem rastrear o site. O Discourse tem uma página de login estática que está ativa quando a configuração do site login required está habilitada. Sem isso, quando você acessa site.com/login, ele o redirecionará para a página inicial real do site e abrirá o modal de login. Desabilitei essa função e fiz com que o visitante permanecesse na página /login. Há também algumas outras partes no arquivo js do aplicativo que tive que modificar. Por exemplo: canDisplaySidebar() para ocultar a barra lateral para visitantes. loginRequired() para não exigir a configuração do site e estar habilitado para visitantes. showSiteHeader para renderizar o cabeçalho apenas quando quisermos, ele é renderizado quando o cookie relacionado está habilitado.

  1. O primeiro componente de tema. (Policy Gate)

Para conseguir isso, modifiquei muito este componente GitHub - discourse/discourse-splash-screen: A welcome splash screen for first time users

Adicionei um portão para os 18+ (Você tem mais de 18 anos?) e algumas outras informações na primeira tela.

Se o visitante clicar em Não, ele adicionará um item no armazenamento de chave-valor que destruirá a página 18+ e redirecionará o visitante para um artigo publicado que escrevemos sobre como o vício afeta os jovens e por que nosso site é apenas para adultos… e colocará um armazenamento de chave-valor para manter os visitantes nessa página. Assim, o armazenamento de chave-valor faz duas coisas.

  1. Destrói toda a página 18+ para que o visitante não possa mudar sua resposta se clicar em Não.
  2. Redireciona-os para o artigo sempre.

Se o visitante clicar em Sim, ele pulará para a segunda tela, que é sobre as informações de cookies. Aqui, os visitantes podem ser informados sobre os cookies que usamos. Clicando no botão Tudo bem, eu entendi, colocamos um cookie de consentimento de cookie no navegador por 1 ano. Isso é importante porque usamos essa parte do componente também para usuários logados. Eles devem consentir a política de cookies todos os anos. Assim, o cookie de consentimento de cookie faz três coisas.

  1. Destrói a página de cookies.
  2. Renderiza o cabeçalho (contém os botões de login, cadastro).
  3. Renderiza o segundo componente e a página de login. :arrow_down_small:

  1. Segundo componente de tema. (Gated Site)

Este componente de tema cria o modelo da página de login, algo como os componentes de tema Guest Gate ou Gated Category, mas ele é renderizado com base em URL e em página inteira. Ele tem duas configurações.

URL permitida e uma para URL não permitida.

  1. O valor da URL permitida é *, o que significa que ele renderiza o portão em todas as URLs.
  2. O valor da URL não permitida é onde não queremos renderizar o portão. Por exemplo: /about , /tos, /faq , /privacy , outras páginas de registro etc…

Quando ele renderiza, ele faz redirecionamentos automáticos para a página /login. Substituí todo o modelo de página de login estática pelo meu modelo que contém os logins sociais etc… partes. Não renderizamos o componente na página /login.


É basicamente o que fiz para conseguir isso.

3 curtidas

Muito interessante, Don! Obrigado por compartilhar os detalhes. :+1:

2 curtidas

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.