Vô hiệu hóa trang web cho tất cả nhưng người dùng đã đăng nhập


11

Tôi biết có nhiều cách để làm điều này, tuy nhiên khi tôi suy nghĩ sâu sắc, việc vô hiệu hóa toàn cầu của trang web có thể khó khăn.

Điều tôi muốn là khi người dùng vào trang web, họ được chuyển hướng đến trang đăng nhập bất kể họ ở đâu. Tôi muốn không cần cài đặt đặc biệt trong mỗi mục menu hoặc khu vực khác của trang.

Có một cách đơn giản để làm điều này? Hoặc một plugin siêu tuyệt vời mà làm điều này? Tìm kiếm của tôi cho đến nay là vô ích. Tuy nhiên, đó có thể là lựa chọn từ khóa của tôi trong JED / Google.


Đặt trang web của bạn ngoại tuyến trong cấu hình toàn cầu?
web-tiki

Điều đó sẽ hoạt động được phần nào, nhưng tính năng này không có nghĩa cho việc này, vì vậy tôi sẽ phải gây rối với các nhóm người dùng và vì vậy, vì tôi đang sử dụng OAuth nghiêm ngặt để đăng nhập (không có người dùng) nên người dùng không dễ dàng thêm vào nó.
Jordan Ramstad

Câu trả lời:


14

Một trong những công việc này sẽ làm việc?

Chỉ thành viên (Từ JED)

Giữ những con mắt tò mò tránh xa một phần hoặc toàn bộ trang web của bạn, trong khi chúng ở ẩn danh. Tùy chọn bạn có thể cho phép khách truy cập đăng ký trực tiếp vào trang web của bạn có hoặc không yêu cầu mã mời.

đã đăng ký (Chỉ từ JED)

pluginOnOnly chỉ giới hạn quyền truy cập vào trang web Joomla đối với người dùng đã đăng ký.

Khi một khách cố gắng truy cập bất kỳ nội dung Joomla nào, họ sẽ được chuyển hướng đến trang đăng nhập.


1
Đăng ký chỉ có vẻ hoạt động như một bùa mê :)
Jordan Ramstad

5

1) Sử dụng ACL tích hợp của Joomla!

Tôi khuyên bạn nên mặc định khách truy cập của mình vào trang đăng nhập và sử dụng ACL tích hợp của Joomla bằng người dùng đã đăng ký.

Đặt một mục Menu cấp cao nhất có quyền cho người dùng đã đăng ký - và sau đó mỗi mục Menu trên cây đó sẽ chỉ hiển thị và khả dụng cho người dùng đã đăng ký.

Có một hướng dẫn tuyệt vời về ACL trong Joomla! Tài liệu.

Tuy nhiên, các tệp và tài liệu vẫn có thể được tải xuống bởi người dùng chưa đăng ký (nghĩa là nếu họ có liên kết trực tiếp).

Trong trường hợp này, bạn sẽ phải sử dụng tiện ích mở rộng của bên thứ 3, nếu bạn muốn bảo vệ các tài liệu đó, chẳng hạn như Hệ thống phát hành Akeeba hoặc SobiPro.

2) Thư mục được bảo vệ bằng mật khẩu

Cách 'đơn giản nhất' để bảo vệ trang web của bạn là Mật khẩu Bảo vệ thư mục của bạn thông qua .htaccess /

Chẳng hạn, nhưng nếu bạn sử dụng cPanel, chẳng hạn, hãy truy cập Bảo mật -> Thư mục được bảo vệ bằng mật khẩu và sử dụng trình hướng dẫn để đặt tên thư mục, thêm hoặc xóa người dùng và gán cho những người dùng đó vào Thư mục được bảo vệ bằng mật khẩu - bạn có thể đặt cho mỗi người dùng một tên duy nhất và mật khẩu.

Nó không phù hợp, nhưng đơn giản và được sử dụng khá thường xuyên trong thực tế - tuy nhiên, tôi nhắc lại, có lẽ nên sử dụng ACL tốt nhất và nếu bảo vệ tài liệu khỏi tải xuống, tiện ích mở rộng của bên thứ 3.

Nếu bạn giữ các tệp / tài liệu của mình trong thư mục Mật khẩu được bảo vệ, thì chúng cũng sẽ được bảo vệ - yêu cầu người dùng có quyền cố gắng truy cập vào thư mục đó để đăng nhập trước.


3

Tôi đã có một yêu cầu khách hàng để tạo một extranet cho họ bằng cách sử dụng Joomla, điều này phải được 'khóa chặt' hết mức có thể. Tôi đã làm điều này bằng cách đặt trang web thành Ngoại tuyến trong Cấu hình Toàn cầu , sau đó chỉnh sửa ACL để cung cấp cho 1 nhóm người dùng tùy chỉnh mà tôi đã tạo quyền truy cập Ngoại tuyến .

Tôi nhận thấy trong các nhận xét bạn đề cập đến việc bạn đang sử dụng OAuth để đăng nhập - một số tiện ích mở rộng hỗ trợ này có thể được định cấu hình để tự động thêm người dùng vào nhóm người dùng, do đó bạn có thể sử dụng chức năng này để thêm chúng vào nhóm được định cấu hình theo hướng dẫn trên.

Sau đó, tôi ghi đè offline.phptệp trong mẫu của mình để làm cho nó trông giống trang đăng nhập kiểu extranet hơn là trang mặc định 'Trang này đang ngoại tuyến'.


3

Tôi sẽ đưa ra câu trả lời của mình cho điều này dựa trên câu trả lời của @ Bryan.

Các thành viên Chỉ cắm vẻ rất hứa hẹn, vì vậy không có bình luận về điều đó.

Các registeredOnly plugin được miễn phí, tuy nhiên tôi đã không gây ấn tượng với mã, vì vậy tôi mất sự tự do của forking và tái viết nó và loại bỏ mã không dùng nữa.

Thêm vào đó, tôi đã xóa hỗ trợ Community Builder vì .... à ... tôi ghét 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');
    }
}

Đặt nó lên trên Github quá: https://github.com/Joomla-StackExchange/registeredOnly

Hy vọng điều này sẽ giúp một số bạn


0

Bạn có thể đặt quyền của tất cả các liên kết menu thành đã đăng ký, buộc người dùng phải đăng nhập.


1
Bởi vì không có mục menu nào khác sau đó đăng nhập sẽ được hiển thị mà không cần người dùng đăng nhập, tôi muốn tránh các bước thêm nếu có thể, như tôi đã nói trong câu hỏi.
Jordan Ramstad

1
Bạn có thể mặc định trang đăng nhập khi các thành viên nhấn địa chỉ trang web của bạn. Họ đăng nhập - các mục menu xuất hiện. Đâu là bước phụ? ACL được thiết lập đẹp cho việc này.
NivF007

@ NivF007 Bước bổ sung là phải đặt quyền truy cập menu thành "Đã đăng ký" mỗi khi bạn tạo một mục menu. Giải pháp đơn giản nhất là có thể đặt mức truy cập menu mặc định, thay vì chỉ mặc định là "Công khai". Nếu bạn có thể đặt nó thành mặc định thành "Đã đăng ký" thì sẽ không cần tiện ích mở rộng.
David Fritsch

1
@DavidFritsch Thiết lập một tham số khi tạo liên kết menu không thực sự khó. Nó không giống như bạn thêm các liên kết menu mới mỗi ngày.
Adam B

1
@AdamB Điều đó sẽ làm việc! Và sau đó thiết lập mô-đun menu để bắt đầu ở cấp hai. Nếu bạn chỉ muốn một lớp. Một giải pháp kỳ quặc trong tâm trí tôi nhưng nên có thể
David Fritsch

-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');

dán mã này vào tệp index.php của mẫu hiện tại của bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.