¡Bienvenido! ¿Aún no estás registrado?, deberás registrarte antes de poder usar el Chat, Comentar y Descargar en el Foro. Usa un email válido para la activación.
Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

COMPLEMENTOS Doble Factor de Autenticación (2FA) v1.0
#1

0
Doble Factor de Autenticación (2FA) v1.0
Nuevo módulo para Risus Nova 2.0 — PHPost


Captura
[img]Registrate o inicia tu sesión para ver este contenido[/img]
 
[img]Registrate o inicia tu sesión para ver este contenido[/img]
 
[img]Registrate o inicia tu sesión para ver este contenido[/img]
 


Cada usuario puede activar el 2FA desde su cuenta. Al iniciar sesión, si las credenciales son correctas, se le pide un código de 6 dígitos enviado a su email antes de entrar.


🛡️ Características
 
  • Código de 6 dígitos criptográficamente seguro
  • Expira en 5 minutos
  • Solo se puede usar una vez
  • Máximo 3 intentos fallidos antes de invalidar
  • Reenvío con límite de 60 segundos
  • Cada usuario activa/desactiva desde su cuenta
  • Email con diseño moderno
  • Compatible con el mod de Protección de Login
 


📋 Requisitos
 
  • Risus Nova 2.0 instalado y funcionando
  • PHP 8.0+
  • Correo mail() configurado en el servidor
 


🛠️ Instalación

Paso 1 — Ejecutar el instalador

Sube la carpeta install/ a la raíz y accede a:

 
Registrate o inicia tu sesión para ver este contenido

⚠️ Elimina la carpeta install/ cuando termine.

Paso 2 — Subir los archivos
 
inc/class/c.2fa.php                      →  inc/class/
inc/php/2fa.php                          →  inc/php/
inc/php/ajax/ajax.2fa.php               →  inc/php/ajax/
themes/default/templates/t.2fa.tpl     →  themes/default/templates/

Paso 3 — En ajax.login.php

Dentro del case 'login-user', donde se llama a loginUser, buscar:
if(empty($user) or empty($pass)) echo '0: Faltan datos';
else echo 
$tsUser->loginUser($user$pass$reme); 


Reemplazar por:
 
if(empty($user) or empty($pass)) {
    echo '0: Faltan datos';
} else {
    $resultado = $tsUser->loginUser($user, $pass, $reme);

    if ($resultado === TRUE || is_numeric($resultado)) {
        // ── 2FA ──
        require_once TS_CLASS . 'c.2fa.php';
        $ts2FA = new ts2FA();
        if ($ts2FA->tieneActivo($tsUser->uid)) {
            $tsUser->logoutUser($tsUser->uid, null);
            $_SESSION['ts_2fa_pending']  = $tsUser->uid;
            $_SESSION['ts_2fa_remember'] = $reme;
            $ts2FA->enviarCodigo($tsUser->uid);
            echo '3: ' . $tsCore->settings['url'] . '/2fa/';
            break;
        }
        // ────────
        echo $resultado;
    } else {
        echo $resultado;
    }
}

Paso 4 — En m.cuenta_cuenta.tpl

Buscar:
<div class="buttons">
<
input type="button" value="Guardar" onclick="cuenta.save(1)" class="mBtn btnOk">
<
input type="button" value="Siguiente" onclick="cuenta.save(1, true)" class="mBtn btnOk">
</
div


Arriba agregar:
 
<div class="field">
    <label>Verificación en dos pasos (2FA):</label>
    <div style="padding:10px; background:#f8f9fa; border-radius:6px; border:1px solid #eee;">
        <label style="display:flex; align-items:center; gap:10px; cursor:pointer;">
            <input type="checkbox" name="2fa"
                   {if $tsUser->info.user_2fa}checked{/if}
                   onchange="cuenta.toggle2FA(this.checked)"/>
            <span>
                <strong>Activar 2FA</strong><br>
                <small style="color:#888; font-weight:400;">Al iniciar sesión se te pedirá un código enviado a tu email.</small>
            </span>
        </label>
    </div>
</div>

Y en cuenta.js buscar:
}

}

var 
avatar = { 


Reemplazar por:
 
},

    toggle2FA: function(activo) {
        $.ajax({
            type: 'POST',
            url: global_data.url + '/2fa-toggle.php',
            data: { activo: activo ? 1 : 0 },
            dataType: 'json',
            success: function(r) {
                if (r.ok) {
                    cuenta.alert(1, activo ? '2FA activado' : '2FA desactivado', activo ? 'Ahora se pedirá un código al iniciar sesión.' : 'La verificación en dos pasos ha sido desactivada.');
                }
            }
        });
    }

}

var avatar = {

Paso 5 — Borrar la caché

Borra el contenido de la carpeta /cache/ del sitio.


🗑️ Desinstalar
 
ALTER TABLE u_miembros DROP COLUMN user_2fa;
DROP TABLE IF EXISTS w_2fa_tokens;

Elimina los archivos y quita el hook de ajax.login.php.

 
Descarga


Mediafire
Debes agradecer para ver el contenido...

Google Drive
Debes agradecer para ver el contenido...



¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.




Responder


Compartir en:

Mensajes en este tema
Doble Factor de Autenticación (2FA) v1.0 - por Tronlar - Hace 8 horas

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)