أبحث عن طريقة لجعل تسجيل الدخول مطلوبًا للموقع حسب البلد. لقد وجدت هذه الإضافة Geo Blocking plugin وهي على الأرجح الأقرب لحالتي، لكن لغة روبي خارج نطاق اهتمامي حاليًا… بعد. أعتقد أن هذه الإضافة قد تكون قابلة للتعديل لتحقيق هذه الطريقة لتمكين تسجيل الدخول مطلوب لدول معينة وإعادة التوجيه إلى /login؟
أهلاً
السبب الرئيسي الذي دفعني لإجراء هذا التغيير هو لوائح قانونية جديدة خاصة ببلد معين تؤثر على موقعي. موقعي وموضوعه متاحان فقط للبالغين الذين تبلغ أعمارهم 18 عامًا فما فوق. لكنني لم أرغب في كسر تحسين محركات البحث (SEO). لذلك، كان أول ما فكرت فيه هو جعل الموقع يتطلب تسجيل الدخول في بلد معين، بهذه الطريقة يمكن لروبوتات جوجل وغيرها الزحف إلى الموقع في بلدان أخرى. يبدو أن طلب تسجيل الدخول الكامل ليس خيارًا جيدًا لأنه يحظر الموقع بأكمله ومحتوياته.
لقد قررت جعله من جانب العميل يبدو خيارًا جيدًا آخر، لذا استخدمت طلب تسجيل الدخول بطريقة لطيفة من جانب العميل. يبدو هذا كافيًا في الوقت الحالي، لذا بدأت به.
أعتقد أنه ليس من أفضل الأفكار مشاركة الكود الكامل هنا الذي أستخدمه لأنه ربما ليس الأفضل لحالات الاستخدام الأخرى وربما ليس الإصدار النهائي وبالطبع فهو يعدل نظام تسجيل الدخول بشكل كبير.
العملية برمتها تعمل الآن مع مكوني سمة منفصلين قد يتم دمجهما في المستقبل.
لكن قبل القيام بذلك، كان علي تعديل بعض الأشياء الأخرى. أولاً وقبل كل شيء، الروبوتات المحددة التي نريدها معفاة من هذه العملية برمتها ولا تزال قادرة على الزحف إلى الموقع. لدى Discourse صفحة تسجيل دخول ثابتة تكون نشطة عند تمكين إعداد الموقع login required. بدون هذا، عندما تذهب إلى site.com/login، سيتم إعادة توجيهك إلى الصفحة الرئيسية الفعلية للموقع وفتح نافذة تسجيل الدخول المنبثقة. قمت بتعطيل هذه الوظيفة وجعلتها تبقي الزائر على صفحة /login. هناك أيضًا بعض الأجزاء الأخرى في ملف JavaScript الخاص بالتطبيقات التي كان علي تعديلها. على سبيل المثال: canDisplaySidebar() لإخفاء الشريط الجانبي للزوار. loginRequired() لعدم طلب إعداد الموقع وأن يكون متاحًا للزوار. showSiteHeader لعرض الرأس فقط عندما نريد ذلك، يتم عرضه عند تمكين ملف تعريف الارتباط ذي الصلة.
المكون الأول للسِمة. (بوابة السياسة)
لتحقيق ذلك، قمت بتعديل هذا المكون بشكل كبير GitHub - discourse/discourse-splash-screen: A welcome splash screen for first time users
لقد أضفت بوابة إلى (هل أنت فوق 18 عامًا؟) وبعض المعلومات الأخرى في الشاشة الأولى.
إذا نقر الزائر على لا، فسيضيف عنصرًا في مخزن المفاتيح والقيم يدمر صفحة 18+ ويعيد توجيه الزائر إلى مقال منشور كتبناه حول كيف تؤثر الإدمانات على الشباب ولماذا موقعنا مخصص للبالغين فقط… ويضع عنصرًا في مخزن المفاتيح والقيم لإبقاء الزوار في تلك الصفحة. لذلك يقوم عنصر مخزن المفاتيح والقيم بأمرين.
يدمر صفحة 18+ بأكملها حتى لا يتمكن الزائر من تغيير إجابته إذا نقر على لا.
يعيد توجيههم إلى المقال دائمًا.
إذا نقر الزائر على نعم، فإنه ينتقل إلى الشاشة الثانية التي تتعلق بمعلومات ملفات تعريف الارتباط. هنا، يمكن للزوار الحصول على معلومات حول ملفات تعريف الارتباط التي نستخدمها. بالنقر على زر حسنًا، فهمت، نقوم بوضع ملف تعريف ارتباط للموافقة على ملفات تعريف الارتباط في المتصفح لمدة عام واحد. هذا مهم لأننا نستخدم هذا الجزء من المكون للمستخدمين المسجلين أيضًا. يجب عليهم الموافقة على سياسة ملفات تعريف الارتباط كل عام. لذلك يقوم ملف تعريف ارتباط الموافقة على ملفات تعريف الارتباط بثلاثة أشياء.
يدمر صفحة ملفات تعريف الارتباط.
يعرض الرأس (يحتوي على أزرار تسجيل الدخول والتسجيل).
يعرض المكون الثاني وصفحة تسجيل الدخول.
المكون الثاني للسِمة. (موقع محظور)
يجعل مكون السمة هذا قالب صفحة تسجيل الدخول، شيء مثل مكونات السمة “بوابة الضيف” أو “الفئة المحظورة” ولكن يتم عرضه بناءً على عنوان URL وصفحة كاملة. لديه إعدادان.
عنوان URL مسموح به وآخر لعنوان URL غير مسموح به.
قيمة عنوان URL المسموح به هي * مما يعني أنه يعرض البوابة على جميع عناوين URL.
قيمة عنوان URL غير المسموح به هي المكان الذي لا نريد فيه عرض البوابة. على سبيل المثال: /about , /tos, /faq , /privacy , صفحات التسجيل الأخرى إلخ…
عندما يتم عرضه، فإنه يقوم بإعادة توجيه تلقائي إلى صفحة /login. لقد قمت بتجاوز قالب صفحة تسجيل الدخول الثابت بالكامل بقالبي الذي يحتوي على تسجيلات الدخول الاجتماعية وما إلى ذلك. نحن لا نعرض المكون على صفحة /login.