Hallo 
Der Hauptgrund für diese Änderung waren neue länderspezifische Gesetze, die meine Website betreffen. Meine Website und das Thema sind nur für Erwachsene ab 18 Jahren zugänglich. Ich wollte jedoch das SEO nicht beeinträchtigen. Daher habe ich zuerst überlegt, die Website in bestimmten Ländern zur Anmeldung zu verpflichten. So könnten der Google-Bot und andere die Website in anderen Ländern crawlen. Eine vollständige Anmeldepflicht scheint keine gute Option zu sein, da sie die gesamte Website und ihre Inhalte blockiert.
Ich habe mich entschieden, dies serverseitig zu implementieren, was als eine weitere gute Option erscheint, indem die Anmeldung auf eine sanfte serverseitige Weise erzwungen wird. Dies scheint im Moment ausreichend zu sein, also habe ich damit begonnen.
Ich glaube nicht, dass es die beste Idee ist, den vollständigen Code hier zu teilen, da er wahrscheinlich nicht für andere Anwendungsfälle geeignet ist, wahrscheinlich nicht die endgültige Version ist und natürlich das Anmeldesystem stark verändert.
Der gesamte Prozess funktioniert jetzt mit zwei separaten Theme-Komponenten, die in Zukunft zusammengeführt werden könnten.
Bevor ich dies tat, musste ich jedoch einige andere Dinge ändern. Erstens sind die ausgewählten Bots, die wir wollen, von diesem gesamten Prozess ausgenommen und können die Website weiterhin crawlen. Discourse hat eine statische Anmeldeseite, die aktiv ist, wenn die Website-Einstellung „Anmeldung erforderlich“ aktiviert ist. Ohne diese wird man, wenn man zu site.com/login geht, zur tatsächlichen Homepage der Website weitergeleitet und das Anmelde-Modal geöffnet. Ich habe diese Funktion deaktiviert und dafür gesorgt, dass Besucher auf der /login-Seite bleiben. Es gibt auch einige andere Teile in der JavaScript-Datei der Anwendung, die ich ändern musste. Zum Beispiel: canDisplaySidebar(), um die Seitenleiste für Besucher auszublenden. loginRequired(), um die Website-Einstellung nicht zu erfordern und für Besucher verfügbar zu sein. showSiteHeader, um den Header nur dann zu rendern, wenn wir es wollen, er wird gerendert, wenn der entsprechende Cookie aktiviert ist.
- Die erste Theme-Komponente. (Policy Gate)
Um dies zu erreichen, habe ich diese Komponente stark modifiziert: GitHub - discourse/discourse-splash-screen: A welcome splash screen for first time users
Ich habe ein Gate für die 18+ (Sind Sie über 18?) und einige andere Informationen auf dem ersten Bildschirm hinzugefügt.
Wenn der Besucher auf Nein klickt, wird ein Eintrag im Key-Value-Store hinzugefügt, der die 18±Seite zerstört und den Besucher zu einem veröffentlichten Artikel weiterleitet, den wir über die Auswirkungen von Sucht auf Jugendliche und warum unsere Website nur für Erwachsene ist, geschrieben haben … und einen Key-Value-Store platziert, um Besucher auf dieser Seite zu halten. Der Key-Value-Store-Eintrag bewirkt also zwei Dinge.
- Er zerstört die gesamte 18±Seite, sodass der Besucher seine Antwort nicht ändern kann, wenn er auf Nein klickt.
- Er leitet sie immer zum Artikel weiter.
Wenn der Besucher auf Ja klickt, springt er zum zweiten Bildschirm, der sich mit den Cookie-Informationen befasst. Hier können Besucher über die von uns verwendeten Cookies informiert werden. Durch Klicken auf die Schaltfläche In Ordnung, ich verstehe platzieren wir ein Cookie-Zustimmungs-Cookie im Browser für 1 Jahr. Dies ist wichtig, da wir diesen Teil der Komponente auch für angemeldete Benutzer verwenden. Sie müssen der Cookie-Richtlinie jedes Jahr zustimmen. Das Cookie-Zustimmungs-Cookie bewirkt also drei Dinge.
- Es zerstört die Cookie-Seite.
- Es rendert den Header (er enthält die Login-, Signup-Buttons).
- Es rendert die zweite Komponente und die Anmeldeseite.

- Zweite Theme-Komponente. (Gated Site)
Diese Theme-Komponente erstellt die Vorlage für die Anmeldeseite, ähnlich wie die Theme-Komponenten Guest Gate oder Gated Category, aber sie wird URL-basiert und vollständig gerendert. Sie hat zwei Einstellungen.
Erlaubte URL und eine für nicht erlaubte URLs.
- Der Wert der erlaubten URL ist
*, was bedeutet, dass das Gate auf allen URLs gerendert wird.
- Der Wert der nicht erlaubten URL ist, wo wir das Gate nicht rendern wollen. Zum Beispiel:
/about , /tos, /faq , /privacy , andere Registrierungsseiten usw. …
Wenn es gerendert wird, führt es automatische Weiterleitungen zur /login-Seite durch. Ich habe die gesamte statische Vorlage der Anmeldeseite mit meiner Vorlage überschrieben, die die Social-Logins usw. enthält. Wir rendern die Komponente nicht auf der /login-Seite.
Das ist ungefähr das, was ich getan habe, um dies zu erreichen.