Deshabilitar el sitio web para todos los usuarios que no hayan iniciado sesión

11

Sé que hay muchas maneras de hacer esto, sin embargo, cuando pienso profundamente, una desactivación global del sitio puede ser difícil.

Lo que quiero es que cuando un usuario vaya al sitio web, sea redirigido a la página de inicio de sesión sin importar dónde se encuentre. Preferiría no necesitar configuraciones especiales en cada elemento del menú u otra área de la página.

¿Hay una manera simple de hacer esto? ¿O un complemento súper increíble que hace esto? Mis búsquedas hasta ahora han sido en vano. Sin embargo, esa podría ser mi elección de palabras clave en JED / Google.

Jordan Ramstad
fuente
poner su sitio fuera de línea en la configuración global?
web-tiki
Eso funcionaría de alguna manera, pero esa característica no está destinada a esto, por lo que tendría que meterme con grupos de usuarios y demás, ya que estoy usando OAuth estricto para iniciar sesión (no hay usuarios), los grupos de usuarios no son fáciles de agregar.
Jordan Ramstad

Respuestas:

14

¿Funcionaría uno de estos?

Solo miembros (del JED)

Mantenga las miradas indiscretas lejos de parte o de todo su sitio web, mientras permanecen en el anonimato. Opcionalmente, puede permitir que los visitantes se registren directamente en su sitio web con o sin requerir un código de invitación.

registradoSolo (del JED)

solamente el complemento restringe el acceso al sitio de Joomla solo a usuarios registrados.

Cuando un invitado intenta acceder a cualquier contenido de Joomla, es redirigido a la página de inicio de sesión.

Brian Peat
fuente
1
Registrado solo parece funcionar como un encanto :)
Jordan Ramstad
5

1) Use la ACL incorporada de Joomla!

Recomiendo que sus visitantes ingresen de forma predeterminada a una página de inicio de sesión y utilicen la ACL integrada de Joomla! Utilizando usuarios registrados.

Establezca un elemento de menú de nivel superior con permisos para usuarios registrados, y luego cada elemento de menú en ese árbol solo estará visible y disponible para los usuarios registrados.

Hay un excelente tutorial sobre ACL en Joomla! Doc.

Sin embargo, los archivos y documentos pueden ser descargados por usuarios no registrados (es decir, si tienen el enlace directo).

En este caso, tendrá que usar una extensión de terceros, si desea proteger esos documentos, como Akeeba Release Systems o SobiPro.

2) Directorios protegidos por contraseña

La forma "más simple" de proteger su sitio es proteger con contraseña su directorio a través de .htaccess /

No es elegante, pero si usa cPanel, por ejemplo, vaya a Seguridad -> Directorios protegidos por contraseña y use el asistente para nombrar directorios, agregar o eliminar usuarios y asignar a esos usuarios al Directorio protegido por contraseña - puede dar a cada usuario un nombre único y contraseña.

Es poco elegante, pero simple y se usa con bastante frecuencia en la práctica; sin embargo, reitero, probablemente sea mejor usar ACL y, si protege los documentos de la descarga, una extensión de terceros.

Si mantiene sus archivos / documentos en el directorio protegido por contraseña, también estarán protegidos, lo que requerirá que un usuario con permisos intente acceder a ese directorio para iniciar sesión primero.

NivF007
fuente
3

Tenía una solicitud del cliente para hacer una extranet para ellos usando Joomla, que tenía que ser 'bloqueada' de la manera más estricta posible. Hice esto configurando el sitio como Sin conexión en Configuración global , luego edité la ACL para dar 1 grupo de usuarios personalizado. Creé el permiso de Acceso sin conexión .

Noto en los comentarios que menciona que está usando OAuth para iniciar sesión: algunas extensiones que ayudan con esto se pueden configurar para agregar usuarios automáticamente a un grupo de usuarios, por lo que podría usar esta funcionalidad para agregarlos al grupo configurado según instrucciones anteriores.

Luego anulé el offline.phparchivo en mi plantilla para que pareciera más una página de inicio de sesión de estilo extranet, en lugar de la página predeterminada 'Este sitio está fuera de línea'.

codinghands
fuente
3

Voy a dar mi respuesta para esto en base a la respuesta de @ Bryan.

El complemento Solo para miembros parece muy prometedor, por lo que no hay comentarios al respecto.

El complemento de Solo registrado es gratuito, sin embargo, no me impresionó el código, así que me tomé la libertad de bifurcarlo y volver a escribirlo y eliminar el código obsoleto.

Además de eso, eliminé el soporte de Community Builder porque ... bueno ... odio a 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');
    }
}

Póngalo también en Github: https://github.com/Joomla-StackExchange/registeredOnly

Espero que esto ayude a algunos de ustedes

Lodder
fuente
0

Puede establecer el permiso de todos los enlaces del menú como registrados, lo que obliga al usuario a iniciar sesión.

Adam B
fuente
1
Como no se mostrará ningún elemento del menú que no sea el inicio de sesión sin que el usuario inicie sesión, preferiría evitar el paso adicional si es posible, como dije en la pregunta.
Jordan Ramstad
1
Puede ingresar por defecto a la página de inicio de sesión cuando los miembros acceden a la dirección de su sitio. Se conectan: aparecen los elementos del menú. ¿Dónde está el paso extra? ACL está configurado maravillosamente para esto.
NivF007
@ NivF007 El paso adicional es tener que configurar el acceso al menú a "Registrado" cada vez que crea un elemento de menú. La solución más simple sería poder establecer un nivel de acceso al menú predeterminado, en lugar de que solo se establezca de forma predeterminada en "Público". Si pudiera establecerlo por defecto en "Registrado", no se necesitaría ninguna extensión.
David Fritsch
1
@DavidFritsch Establecer un parámetro en la creación de un enlace de menú no es exactamente un trabajo difícil. No es como si agregas nuevos enlaces de menú todos los días.
Adam B
1
@ Adam ¡Eso funcionaría! Y luego configure el módulo de menú para comenzar en el nivel dos. Si querías solo una capa. Una solución extraña en mi mente pero debería ser posible
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');

pegue este código en el archivo index.php de su plantilla actual

Канбото Мыктыбек
fuente