国によるログインが必要です

こんにちは :waving_hand:

国別にサイトへのログインを必須にする方法を探しています。このプラグイン Geo Blocking plugin を見つけましたが、おそらく私のユースケースに最も近いものです。しかし、Ruby は現時点では私の範囲外です。このプラグインを、特定の国で ログイン必須 を有効にし、/login にリダイレクトするように変更できると思いますか?

何かアドバイスがあれば教えてください!:slightly_smiling_face:

「いいね!」 3

こんにちは :waving_hand:

この変更を行った主な理由は、私のサイトに影響を与える新しい国別の法律規制です。私のサイトとそのトピックは18歳以上の成人専用です。しかし、SEOを損ないたくありませんでした。そこで最初に考えたのは、特定の国でサイトへのログインを必須にすることでした。これにより、Googleボットやその他のクローラーが他の国でサイトをクロールできるようになります。サイト全体へのログイン必須は、サイト全体とそのコンテンツをブロックするため、良い選択肢ではないようです。

クライアントサイドで実装することを別の良い選択肢と考え、ソフトなクライアントサイドの方法でログインを必須にすることにしました。これは現時点では十分だと思われたので、これに着手しました。

:warning: ここで共有するコード全体は、他のユースケースにとって最適ではない可能性があり、最終バージョンではない可能性が高く、もちろんログインシステムを大幅に変更しているため、共有するのは最善のアイデアではないと思います。


プロセス全体は現在、将来的に統合される可能性のある2つの別々のテーマコンポーネントで機能しています。

しかし、それを行う前に、他のいくつかのことを変更する必要がありました。まず、選択したボットは、このプロセス全体から除外され、引き続きサイトをクロールできます。Discourseには、login requiredサイト設定が有効な場合にアクティブになる静的なログインページがあります。これがない場合、site.com/loginにアクセスすると、サイトの実際のホームページにリダイレクトされ、ログインモーダルが開きます。この機能を無効にし、訪問者を/loginページに留まるようにしました。アプリケーションのJavaScriptファイルには、変更する必要がある他の部分もいくつかあります。たとえば、canDisplaySidebar()は訪問者に対してサイドバーを非表示にします。loginRequired()はサイト設定を要求せず、訪問者が利用できるようにします。showSiteHeaderは、関連するCookieが有効な場合にのみヘッダーをレンダリングします。

  1. 最初のテーマコンポーネント。(ポリシーゲート)

これを達成するために、このコンポーネントを大幅に変更しました。GitHub - discourse/discourse-splash-screen: A welcome splash screen for first time users

18歳以上かどうかを確認するゲート(「18歳以上ですか?」)と、最初の画面にいくつかの追加情報を追加しました。

訪問者が「いいえ」をクリックすると、18歳以上のページを破棄し、依存症が若者にどのように影響するか、そしてなぜ私たちのサイトが成人専用なのかについて書いた記事のページに訪問者をリダイレクトするキーバリューストアアイテムが追加されます。そして、訪問者をそのページに留めるためのキーバリューストアが配置されます。キーバリューストアアイテムは2つのことを行います。

  1. 18歳以上のページ全体を破棄するため、訪問者は「いいえ」をクリックしても回答を変更できません。
  2. 常に記事にリダイレクトします。

訪問者が「はい」をクリックすると、Cookie情報に関する2番目の画面にジャンプします。ここでは、訪問者は使用しているCookieについて知ることができます。「わかりました、理解しました」ボタンをクリックすると、1年間ブラウザにCookie同意Cookieが配置されます。これは、このコンポーネントの一部をログインユーザーにも使用するため重要です。毎年Cookieポリシーに同意する必要があります。したがって、Cookie同意Cookieは3つのことを行います。

  1. Cookieページを破棄します。
  2. ヘッダー(ログイン、サインアップボタンが含まれています)をレンダリングします。
  3. 2番目のコンポーネントとログインページをレンダリングします。:arrow_down_small:

  1. 2番目のテーマコンポーネント。(ゲート付きサイト)

このテーマコンポーネントは、ログインページテンプレートを作成します。ゲストゲートやゲート付きカテゴリのテーマコンポーネントのようなものですが、URLベースでフルページでレンダリングされます。2つの設定があります。

許可されたURLと、許可されていないURL。

  1. 許可されたURLの値は*であり、これはすべてのURLでゲートをレンダリングすることを意味します。
  2. 許可されていないURLの値は、ゲートをレンダリングしたくない場所です。たとえば、/about, /tos, /faq, /privacy, その他の登録ページなどです。

レンダリングされると、/loginページへの自動リダイレクトが行われます。静的なログインページテンプレート全体を、ソーシャルログインなどの部分を含む私のテンプレートでオーバーライドしました。/loginページではコンポーネントをレンダリングしません。


これが、これを達成するために行ったことの概要です。

「いいね!」 3

興味深いですね、ドン!詳細を共有していただきありがとうございます。:+1:

「いいね!」 2

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