로그인하지 않은 모든 사용자에게 웹 사이트 사용 안함


11

이 작업을 수행하는 방법에는 여러 가지가 있다는 것을 알고 있지만 깊이 생각하면 사이트를 전체적으로 사용 중지하는 것이 어려울 수 있습니다.

내가 원하는 것은 사용자가 웹 사이트를 방문하면 어디에 있든지 로그인 페이지로 리디렉션됩니다. 모든 메뉴 항목이나 페이지의 다른 영역에 특별한 설정이 필요하지 않습니다.

이를 수행하는 간단한 방법이 있습니까? 아니면이 작업을 수행하는 멋진 플러그인입니까? 지금까지 내 검색은 헛된 것입니다. 그러나 JED / Google에서 키워드를 선택했을 수도 있습니다.


글로벌 구성에서 사이트를 오프라인 상태로 전환 하시겠습니까?
웹 티키

그것은 다소 효과가 있지만 그 기능은 이것을위한 것이 아니므로 사용자 그룹과 엉망이되어야합니다. 따라서 로그인 (사용자 없음)에 엄격한 OAuth를 사용하고 있기 때문에 사용자 그룹은 쉽게 추가 할 수 없습니다.
Jordan Ramstad

답변:


14

이 중 하나가 작동합니까?

회원 전용 (JED에서)

익명을 유지하면서 일부 또는 전체 웹 사이트에서 눈을 떼지 마십시오. 선택적으로 방문자가 초대 코드없이 또는 웹 사이트에 직접 등록하도록 허용 할 수 있습니다.

등록 된 경우 (JED에서)

등록 된 플러그인 만이 Joomla 사이트에 대한 액세스를 등록 된 사용자로만 제한합니다.

게스트가 Joomla 컨텐츠에 액세스하려고하면 로그인 페이지로 리디렉션됩니다.


1
등록은 매력처럼 작동하는 것 같습니다 :)
Jordan Ramstad

5

1) Joomla!의 내장 ACL 사용

방문자를 기본적으로 로그인 페이지로 설정하고 등록 된 사용자를 사용하여 Joomla!의 내장 ACL을 사용하는 것이 좋습니다.

등록 된 사용자에게 권한이있는 최상위 메뉴 항목을 설정하면 해당 트리의 각 메뉴 항목은 등록 된 사용자 만보고 사용할 수 있습니다.

Joomla 에 ACL 에 대한 훌륭한 튜토리얼 이 있습니다! 문서

그러나 등록되지 않은 사용자가 파일과 문서를 계속 다운로드 할 수 있습니다 (예 : 직접 링크가있는 경우).

이 경우 Akeeba Release Systems 또는 SobiPro와 같은 문서를 보호하려면 타사 확장을 사용해야합니다.

2) 비밀번호로 보호 된 디렉토리

사이트를 보호하는 가장 간단한 방법은 .htaccess /를 통해 디렉토리를 비밀번호로 보호하는 것입니다.

예를 들어 cPanel을 사용하는 경우 보안-> 비밀번호로 보호 된 디렉토리로 이동하여 마법사를 사용하여 디렉토리 이름을 지정하고 사용자를 추가 또는 제거하고 해당 사용자를 비밀번호로 보호 된 디렉토리에 지정하십시오. 각 사용자에게 고유 한 이름을 지정할 수 있습니다. 그리고 비밀번호.

우아하지만 단순하고 실제로는 자주 사용됩니다. 그러나 ACL을 사용하는 것이 좋으며 문서가 타사 확장 프로그램 인 다운로드로부터 보호되는 경우가 가장 좋습니다.

파일 / 문서를 비밀번호로 보호 된 디렉토리에 보관하면 파일 / 문서도 보호되므로 해당 디렉토리에 액세스하려는 권한이있는 사용자가 먼저 로그인해야합니다.


3

클라이언트가 Joomla를 사용하여 익스트라 넷을 만들도록 요청했습니다. Joomla는 최대한 엄격하게 '잠금'상태 여야했습니다. 전역 구성 에서 사이트를 오프라인 으로 설정하여이 작업을 수행 한 다음 오프라인 액세스 권한을 만든 1 개의 사용자 지정 사용자 그룹을 제공하도록 ACL을 편집했습니다 .

로그인에 OAuth를 사용한다고 언급 한 의견에서 알 수 있습니다.이를 지원하는 일부 확장 프로그램은 사용자를 사용자 그룹에 자동으로 추가하도록 구성 할 수 있으므로이 기능을 사용하여 위의 지침.

그런 다음 offline.php기본 '이 사이트는 오프라인입니다'페이지가 아니라 템플릿 의 파일 을 오버넷 스타일의 로그인 페이지처럼 보이도록 덮어 씁니다 .


3

@Bryan의 답변을 기반으로 이에 대한 답변을 드리겠습니다.

회원 만 외모는 매우, 그것에 대한 그래서 코멘트를 약속하지 플러그인.

registeredOnly의 I가 분기하고 다시 작성하고 사용되지 않는 코드를 제거하는 자유를했다, 그래서 플러그인 그러나 나는 코드를 무료로 잡았습니다됩니다.

그 외에도 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');
    }
}

https://github.com/Joomla-StackExchange/registeredOnly : Github에도 올려 놓으십시오.

이것이 당신의 일부를 돕기를 바랍니다


0

모든 메뉴 링크의 권한을 등록하도록 설정하여 사용자가 로그인하도록 할 수 있습니다.


1
사용자가 로그인하지 않고 로그인 이외의 메뉴 항목이 표시되지 않으므로 질문에서 말한 것처럼 가능한 경우 추가 단계를 피하는 것이 좋습니다.
Jordan Ramstad

1
회원이 사이트 주소를 방문하면 로그인 페이지를 기본값으로 설정할 수 있습니다. 로그인하면 메뉴 항목이 나타납니다. 추가 단계는 어디에 있습니까? ACL이 아름답게 설정되었습니다.
NivF007 23시 43 분

@ NivF007 추가 단계는 메뉴 항목을 만들 때마다 메뉴 액세스를 "등록됨"으로 설정해야합니다. 가장 간단한 해결책은 기본 설정이 "공용"이 아닌 기본 메뉴 액세스 수준을 설정하는 것입니다. 기본값을 "등록됨"으로 설정할 수 있으면 확장이 필요하지 않습니다.
David Fritsch

1
@DavidFritsch 메뉴 링크를 만들 때 하나의 매개 변수를 설정하는 것은 어려운 일이 아닙니다. 매일 새로운 메뉴 링크를 추가하는 것은 아닙니다.
Adam B

1
@AdamB 작동합니다! 그런 다음 메뉴 모듈을 2 단계에서 시작하도록 설정하십시오. 하나의 레이어 만 원한다면 내 마음에 이상한 해결책이지만 가능해야한다
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');

이 코드를 현재 템플릿의 index.php 파일에 붙여 넣기

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.