ปิดการใช้งานเว็บไซต์ทั้งหมดยกเว้นผู้ใช้ที่ล็อกอิน


11

ฉันรู้ว่ามีหลายวิธีในการทำเช่นนี้อย่างไรก็ตามเมื่อฉันคิดอย่างลึกซึ้งการปิดการใช้งานทั่วโลกของไซต์อาจเป็นเรื่องยาก

สิ่งที่ฉันต้องการคือเมื่อผู้ใช้ไปที่เว็บไซต์พวกเขาจะถูกเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบไม่ว่าพวกเขาจะอยู่ที่ไหน ฉันไม่ต้องการตั้งค่าพิเศษในทุกรายการเมนูหรือส่วนอื่น ๆ ของหน้า

มีวิธีง่าย ๆ ในการทำเช่นนี้? หรือปลั๊กอินสุดยอดเยี่ยมที่ทำสิ่งนี้? การค้นหาของฉันจนถึงตอนนี้ไร้ประโยชน์ อย่างไรก็ตามนั่นอาจเป็นทางเลือกของฉันสำหรับคำหลักใน JED / Google


ทำให้ไซต์ของคุณออฟไลน์อยู่ในการกำหนดค่าส่วนกลางหรือไม่
web-tiki

นั่นจะใช้งานได้บ้าง แต่คุณสมบัตินั้นไม่ได้มีไว้สำหรับสิ่งนี้ดังนั้นฉันจะต้องยุ่งกับกลุ่มผู้ใช้และเช่นนั้นเนื่องจากฉันใช้ OAuth ที่เข้มงวดสำหรับการเข้าสู่ระบบ (ไม่มีผู้ใช้) กลุ่มผู้ใช้จึงไม่ง่ายที่จะเพิ่มเข้าไป
Jordan Ramstad

คำตอบ:


14

จะเป็นหนึ่งในงานเหล่านี้หรือไม่

สมาชิกเท่านั้น (จาก JED)

ระวังไม่ให้เข้าใกล้ส่วนใดส่วนหนึ่งหรือทั้งเว็บไซต์ของคุณในขณะที่ไม่เปิดเผยตัวตน คุณสามารถเลือกที่จะอนุญาตให้ผู้เยี่ยมชมลงทะเบียนโดยตรงกับเว็บไซต์ของคุณโดยมีหรือไม่ต้องใช้รหัสเชิญ

ลงทะเบียนเท่านั้น (จาก JED)

ลงทะเบียนเฉพาะปลั๊กอิน จำกัด การเข้าถึงเว็บไซต์ Joomla เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้น

เมื่อแขกพยายามเข้าถึงเนื้อหา Joomla ใด ๆ พวกเขาจะถูกนำไปที่หน้าเข้าสู่ระบบ


1
สมัครสมาชิกเท่านั้นดูเหมือนว่าจะทำงานเช่นเสน่ห์ :)
จอร์แดน Ramstad

5

1) ใช้ ACL ในตัวของ Joomla!

ฉันขอแนะนำให้เริ่มต้นผู้เข้าชมหน้าเข้าสู่ระบบและใช้ ACL ในตัว Joomla! โดยใช้ผู้ใช้ที่ลงทะเบียน

ตั้งค่ารายการเมนูระดับบนสุดด้วยการอนุญาตให้ผู้ใช้ที่ลงทะเบียน - และจากนั้นรายการเมนูแต่ละรายการในแผนผังนั้นจะปรากฏให้เห็นและพร้อมใช้งานสำหรับผู้ใช้ที่ลงทะเบียนแล้วเท่านั้น

มีการสอนที่ยอดเยี่ยมเกี่ยวกับ ACLใน Joomla! เอกสาร

อย่างไรก็ตามไฟล์และเอกสารยังคงสามารถดาวน์โหลดได้โดยผู้ใช้ที่ไม่ได้ลงทะเบียน (เช่นถ้าพวกเขามีลิงค์โดยตรง)

ในกรณีนี้คุณจะต้องใช้ส่วนขยายของบุคคลที่สามหากคุณต้องการปกป้องเอกสารเหล่านั้นเช่น Akeeba Release Systems หรือ SobiPro

2) ไดเรกทอรีที่ป้องกันด้วยรหัสผ่าน

วิธีที่ง่ายที่สุดในการปกป้องเว็บไซต์ของคุณคือการใช้รหัสผ่านป้องกันไดเรกทอรีของคุณผ่าน. htaccess /

มันไม่เหมาะสม แต่ถ้าคุณใช้ cPanel ตัวอย่างเช่นไปที่ความปลอดภัย -> ไดเรกทอรีที่มีการป้องกันด้วยรหัสผ่านและใช้ตัวช่วยสร้างเพื่อตั้งชื่อไดเรกทอรีเพิ่มหรือลบผู้ใช้และกำหนดผู้ใช้เหล่านั้นให้กับไดเรกทอรีที่ได้รับการป้องกันด้วยรหัสผ่าน และรหัสผ่าน

มันไม่ซับซ้อน แต่ใช้งานง่ายและค่อนข้างบ่อยในทางปฏิบัติ - อย่างไรก็ตามฉันขอย้ำว่ามันอาจจะใช้ ACL ได้ดีที่สุดและหากปกป้องเอกสารจากการดาวน์โหลด

หากคุณเก็บไฟล์ / เอกสารของคุณไว้ในไดเรกทอรีที่มีการป้องกันด้วยรหัสผ่านสิ่งเหล่านั้นจะได้รับการปกป้องเช่นกัน - กำหนดให้ผู้ใช้ที่มีสิทธิ์พยายามเข้าถึงไดเรกทอรีนั้นเพื่อเข้าสู่ระบบก่อน


3

ฉันได้รับคำขอจากลูกค้าให้ทำเอ็กทราเน็ตให้กับพวกเขาโดยใช้ Joomla ซึ่งจะต้อง 'ถูกล็อค' อย่างเคร่งครัดที่สุด ฉันทำสิ่งนี้โดยตั้งค่าไซต์เป็นออฟไลน์ในการกำหนดค่าทั่วโลกจากนั้นแก้ไข ACL เพื่อให้กลุ่มผู้ใช้ที่กำหนดเอง 1 กลุ่มที่ฉันสร้างสิทธิ์การเข้าถึงออฟไลน์

ฉันสังเกตเห็นในความคิดเห็นที่คุณพูดถึงคุณกำลังใช้ OAuth สำหรับการเข้าสู่ระบบ - ส่วนขยายบางอย่างที่ช่วยในเรื่องนี้สามารถกำหนดค่าให้เพิ่มผู้ใช้ในกลุ่มผู้ใช้โดยอัตโนมัติดังนั้นคุณจึงสามารถใช้ฟังก์ชันนี้เพื่อเพิ่มพวกเขาไปยังกลุ่ม คำแนะนำข้างต้น

จากนั้นฉันก็ข้ามoffline.phpไฟล์ในเทมเพลตของฉันเพื่อให้ดูเหมือนเป็นหน้าเข้าสู่ระบบแบบเอ็กซ์ทราเน็ตแทนหน้า 'ไซต์นี้ออฟไลน์' เป็นค่าเริ่มต้น


3

ฉันจะตอบคำถามนี้ตามคำตอบของ @ Bryan

สมาชิกเท่านั้นปลั๊กอินดูแนวโน้มมากดังนั้นไม่มีความเห็นว่า

registeredOnlyปลั๊กอินฟรี แต่ฉันไม่ได้ประทับใจกับรหัสดังนั้นฉันเอาเสรีภาพของฟอร์กและอีกครั้งเขียนและลบรหัสที่ถูกปฏิเสธ

นอกจากนั้นฉันลบการสนับสนุน Community Builder เพราะ .... ดี ... ฉันเกลียด Community Builder:

defined('_JEXEC') or die('Restricted access');

class plgSystemRegisteredonly extends JPlugin
{
    public function onAfterRoute() 
    {
        $app   = JFactory::getApplication('site');
        $input = $app->input;
        $user  = JFactory::getUser();

        // Do nothing if in backend or user is logged in
        if ($app->isAdmin() || !$user->guest)
        {
            return;
        }

        // Get the component, view and task
        $option = $input->get('option');
        $view   = $input->get('view');
        $task   = $input->get('task');

        // If user is logging, registering or requesting user/pass, dont redirect
        if (($option == 'com_users') && (($task == 'login') || ($task == 'register_save') || ($task = 'remindusername') || ($task == 'requestreset')))
        {
            return;
        }

        // If user is at login form, registering or recovering user/password, dont redirect
        if (($option == 'com_users') && (($view == 'login') || ($view == 'reset') || ($view == 'remind') || ($view == 'register')))
        {
            return;
        }

        $app->redirect(JUri::base() . 'index.php?option=com_users&view=login', 'You must be logged in to access this site');
    }
}

วางมันบน Github ด้วย: https://github.com/Joomla-StackExchange/registeredOnly

หวังว่านี่จะช่วยให้คุณกี่คน


0

คุณสามารถตั้งค่าการอนุญาตการเชื่อมโยงเมนูทั้งหมดเป็นการลงทะเบียนบังคับให้ผู้ใช้เข้าสู่ระบบ


1
เนื่องจากไม่มีรายการเมนูอื่น ๆ จากนั้นจะแสดงการเข้าสู่ระบบโดยที่ผู้ใช้ไม่ได้เข้าสู่ระบบฉันต้องการหลีกเลี่ยงขั้นตอนพิเศษถ้าเป็นไปได้ตามที่ฉันพูดในคำถาม
Jordan Ramstad

1
คุณสามารถเริ่มต้นที่หน้าเข้าสู่ระบบเมื่อสมาชิกกดที่อยู่เว็บไซต์ พวกเขาเข้าสู่ระบบ - รายการเมนูปรากฏขึ้น ขั้นตอนพิเศษอยู่ที่ไหน ACL ได้รับการตั้งค่าอย่างสวยงามสำหรับสิ่งนี้
NivF007

@ NivF007 ขั้นตอนพิเศษคือต้องตั้งค่าการเข้าถึงเมนูเป็น "ลงทะเบียน" ทุกครั้งที่คุณสร้างรายการเมนู ทางออกที่ง่ายที่สุดคือการสามารถตั้งค่าระดับการเข้าถึงเมนูเริ่มต้นแทนที่จะตั้งเป็น "สาธารณะ" หากคุณสามารถตั้งเป็นค่าเริ่มต้นเป็น "ลงทะเบียน" ไม่จำเป็นต้องใช้ส่วนขยาย
David Fritsch

1
@DavidFritsch การตั้งค่าหนึ่งพารามิเตอร์ในการสร้างลิงค์เมนูนั้นไม่ได้ทำงานหนัก ไม่ใช่ว่าคุณจะเพิ่มลิงค์เมนูใหม่ทุกวัน
อดัม B

1
@ AdamB มันจะใช้ได้! จากนั้นตั้งค่าโมดูลเมนูให้เริ่มที่ระดับสอง ถ้าคุณต้องการเพียงหนึ่งชั้น ทางออกที่แปลกในใจของฉัน แต่น่าจะเป็นไปได้
เดวิดฟริตช์

-2
$haystack= JURI::current();
$needle = '/login';
$is_login_page = $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== FALSE);
if(JFactory::getUser()->guest && !$is_login_page && $_SERVER['HTTP_HOST'] != 'vauler.com' && $_SERVER['HTTP_HOST'] != '127.0.0.1:92')
    $app->redirect('index.php/login');

วางรหัสนี้เพื่อไฟล์ index.php ของแม่แบบปัจจุบันของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.