对所有未登录用户禁用网站


11

我知道有很多方法可以做到这一点,但是当我深思熟虑时,全局禁用该站点可能会很困难。

我想要的是,当用户访问该网站时,无论他们身在何处,他们都将重定向到登录页面。我希望不需要在每个菜单项或页面其他区域中进行特殊设置。

有没有简单的方法可以做到这一点?或执行此操作的超赞插件?到目前为止,我的搜索都是徒劳的。但是,这可能只是我在JED / Google中选择的关键字。


在全局配置中使您的网站脱机?
web-tiki 2014年

那会有些用,但是该功能并不是要这样做的,所以我不得不弄乱用户组,因此,由于我使用严格的OAuth进行登录(没有用户),因此不容易将用户组添加到其中。
乔丹·拉姆斯塔德(Dordan Ramstad)

Answers:


14

其中一项可行吗?

仅限会员(来自JED)

保持匿名,不要让您的视线从部分或整个网站上移开。(可选)您可以允许访问者直接输入您的网站,而无需输入邀请码。

仅注册(来自JED)

RegisteredOnly插件仅允许注册用户访问Joomla网站。

当访客尝试访问任何Joomla内容时,它们将被重定向到登录页面。


1
注册似乎只是一种魅力:)
Jordan Ramstad 2014年

5

1)使用Joomla!的内置ACL

我建议您将访问者默认为登录页面,并使用Joomla!的内置ACL(已注册用户)。

将顶级菜单项设置为已注册用户的权限-然后该树上的每个菜单项将仅对注册用户可见并且可用。

Joomla中提供了有关ACL的出色教程!文件。

但是,未注册的用户仍然可以下载文件和文档(即如果他们具有直接链接)。

在这种情况下,如果您想保护那些文档,例如Akeeba Release Systems或SobiPro,则必须使用第三方扩展。

2)受密码保护的目录

保护您网站的最简单方法是通过.htaccess /

它不雅致,但是例如,如果您使用cPanel,请转到“安全性”->“密码保护目录”,然后使用向导命名目录,添加或删除用户并将这些用户分配到“密码保护目录”中,您可以为每个用户指定一个唯一的名称和密码。

它不雅致,但简单易用,并且在实践中经常使用-但是,我重申,它最好使用ACL,并且如果要保护文档免于下载,则应使用第三方扩展。

如果将文件/文档保留在“受密码保护”目录下,那么这些文件/文档也将受到保护-要求具有权限的用户尝试访问该目录才能首先登录。


3

我有一个客户要求使用Joomla为他们建立一个外部网,必须尽可能严格地“锁定”它。我通过在“ 全局配置”中将站点设置为“ 脱机”来完成此操作,然后编辑ACL以给1个自定义用户组我创建了“ 脱机访问”权限。

我在您提到的评论中注意到您正在使用OAuth进行登录-一些辅助此扩展的功能可以配置为自动将用户添加到用户组,因此您可以使用此功能将其添加到按以上说明。

然后offline.php,我覆盖了模板中的文件,使其看起来更像是Extranet样式的登录页面,而不是默认的“此站点处于脱机状态”页面。


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
因为在没有用户登录的情况下不会显示除登录之外的其他菜单项,所以我宁愿避免额外的步骤,如我在问题中所说。
乔丹·拉姆斯塔德(Dordan Ramstad)

1
当成员点击您的站点地址时,您可以默认进入登录页面。他们登录-出现菜单项。额外的步骤在哪里?为此,ACL设置精美。
NivF007,2014年

@ NivF007额外的步骤是每次创建菜单项时都必须将菜单访问权限设置为“已注册”。最简单的解决方案是能够设置默认菜单访问级别,而不是仅将其默认设置为“公共”。如果可以将其默认设置为“已注册”,则不需要扩展名。
大卫·弗里奇

1
@DavidFritsch在创建菜单链接时设置一个参数并不是一件容易的事。并不是每天都添加新的菜单链接。
亚当B

1
@AdamB那行得通!然后将菜单模块设置为从第二级开始。如果只需要一层。我心中有一个奇怪的解决方案,但应该可以实现
David Fritsch 2014年

-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文件中

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.