Hace 5 horas
0
Doble Factor de Autenticación (2FA) v1.0
Nuevo módulo para Risus Nova 2.0 — PHPost
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:
Código: ( Seleccionar Todo )
Registrate o inicia tu sesión para ver este contenido⚠️ Elimina la carpeta install/ cuando termine.
Paso 2 — Subir los archivos
Código: ( Seleccionar Todo )
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:
Código PHP: ( Seleccionar Todo )
if(empty($user) or empty($pass)) echo '0: Faltan datos';
else echo $tsUser->loginUser($user, $pass, $reme);
Reemplazar por:
Código: ( Seleccionar Todo )
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:
Código PHP: ( Seleccionar Todo )
<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:
Código: ( Seleccionar Todo )
<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:
Código PHP: ( Seleccionar Todo )
}
}
var avatar = {
Reemplazar por:
Código: ( Seleccionar Todo )
},
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
Código: ( Seleccionar Todo )
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.
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.


Facebook
Twitter
Reddit
Digg
del.icio.us
Tumblr
Pinterest
Blogger
Fark
LinkedIn
Mix
Google