En JosSecurity agradecemos cualquier ayuda para poder mantener este proyecto, si deseas donar por favor da clic en el botón de al lado y te daremos algunas opciones para hacerlo.

Iniciar sesión de manera rápida con php

Sistema de Panel

Con la versión 2.3, el acceso desde el archivo Panel es OBLIGATORIO, ya que, explicarlo es muy difícil, debido a que hemos integrado configuraciones 2FA.

Te dejamos la parte esencial del código para que puedas decidir que usar al iniciar sesión, cambiar la contraseña, entre otras.

				
					<?php
if(isset($_GET['check_user'])){
        $conexion = conect_mysqli();
        $check = mysqli_real_escape_string($conexion, (string) $_GET['check_user']);
        if(leer_tablas_mysql_custom("SELECT id_user FROM check_users WHERE check_users.url = '$check' && check_users.accion = 'check_user'") >=1){
            $checking = consulta_mysqli_where("id, id_user, accion","check_users","check_users.url","'$check'");
            $id_user = $checking['id_user'];
            if($checking['accion'] == "check_user"){
                if(actualizar_datos_mysqli("users","`checked_status` = 'TRUE'","id",$id_user) == TRUE){
                    eliminar_datos_con_where("check_users","id_user",$id_user);?>
                    <script>
                        Swal.fire(
                        'Completado',
                        'Se ha verificado tu cuenta de manera correcta.',
                        'success'
                        )
                    </script>
                    <?php
                    header("location: panel");
                }
            }
        }else{
            ?>
            <script>
                Swal.fire(
                'Oh no!',
                'No se ha podido verificar este token, favor de intentar acceder a tu cuenta para generar otro token.',
                'error'
                )
            </script>
            <?php
            header("location: panel");
        }
    }elseif(isset($_GET['login_auth'])){
        $llave = $_GET['login_auth'];
        if(!isset($_GET['cookies']) || $_GET['cookies'] == "no"){
            $cookies = "no";
        }else{
            $cookies = "si";
        }
        $checking = consulta_mysqli_where("id_user", "check_users","url", "'$llave'");
        $id_user_login = $checking['id_user'];
        $checker = consulta_mysqli_where("email", "users", "id", "$id_user_login");
        if($checker["email"] == $_GET['correo']){
            eliminar_datos_con_where("check_users","id_user",$checking['id_user']);
            $check = logins($_GET['correo'],$_GET['contra'],"users",$cookies);
            if($check == false){
                ?>
                <script>
                    Swal.fire(
                    'Falló',
                    'La contraseña que usó en su momento es incorrecta.',
                    'error'
                    )
                </script>
                <?php
                header("refresh:1;");
            }
        }else{
            ?>
            <script>
                Swal.fire(
                    'Falló',
                    'Probablemente el token se encuentre mal escrito o haya caducado, favor de volver a intentar iniciar sesión',
                    'error'
                )
            </script>
            <?php
            header("refresh:1;");
        }

    }elseif (isset($_POST["ingresar"])){
        if(recaptcha() == TRUE){
            if(!isset($_POST['cookies'])){
                $cookies = "no";
            }else{
                $cookies = "si";
            }
            $fa = FA($_POST['txtCorreo'],$_POST['txtPassword'],$_POST['2fa'],$cookies);
            if($fa == "2fa"){
                ?>
                <script>
                    Swal.fire(
                    'Listo',
                    'Hemos detectado que tiene activado el acceso por alta seguridad, favor de usar tu método de acceso.',
                    'success'
                    )
                </script>
                <?php header("refresh:1;"); ?>
                <?php
            }if($fa == "error"){
                ?>
                <script>
                    Swal.fire(
                    'Error',
                    'No hemos podido verificar tu accceso por 2FA.',
                    'error'
                    )
                </script>
                <?php header("refresh:1;"); ?>
                <?php
            }else{
                $check = FA($_POST['txtCorreo'],$_POST['txtPassword'],$cookies);
                if($check == false){
                    ?>
                    <script>
                        Swal.fire(
                        'Falló',
                        'La contraseña es incorrecta.',
                        'error'
                        )
                    </script>
                    <?php
                    header("refresh:1;");
                }
            }
        }else{
            ?>
            <script>
                Swal.fire(
                'Falló',
                'No ingresaste el recaptcha.',
                'error'
                )
            </script>
            <?php
            header("refresh:1;");
        }
    }elseif(isset($_POST['reset'])){
        $correo = $_POST['txtCorreo'];
        if(recaptcha() == TRUE){
            if(leer_tablas_mysql_custom("SELECT users.name FROM users WHERE users.email = '$correo'") >=1 ){
                $consulta = consulta_mysqli_where("name, last_ip, phone","users","email","'$correo'");
                $ip_acceso_completado = (string)$consulta['last_ip'];
                $ip_usuario = (string)$_SERVER['PHP_SELF'];
                ?>
                <div class="contenedor_blanco">
                    <center><h2>Recupera tu contraseña</h2><p>Hola <?php echo $consulta['name'] ?>, estás a punto de restaurar tu contraseña, a continuación te daremos opciones de cómo poder restaurar tu contraseña.</p><p>Tu dirección ip es la siguiente: <?php echo $_SERVER['REMOTE_ADDR']; ?></p></center>
                    <form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
                        <input type="hidden" name="correo" value="<?php echo $correo; ?>">
                        <?php
                        if($ip_acceso_completado == $ip_usuario){
                            ?>
                            <p>¡Buenas noticias!</p>
                            <p>Anteriormente haz iniciado sesión desde esta dirección IP, a continuación ingresa tu nueva contraseña</p>
                            <div class="grid_2_auto">
                                <div class="mb-3 contenedor">
                                  <label for="contra" class="form-label">Contraseña</label>
                                  <input type="password"
                                    class="form-control" name="contra" id="contra" aria-describedby="contra" placeholder="Pon tu nueva contraseña">
                                  <small id="contra" class="form-text text-muted">Pon la contraseña que usarás.</small>
                                </div>
                                <div class="mb-3 contenedor">
                                  <label for="new_contra" class="form-label">Repita la contraseña</label>
                                  <input type="password"
                                    class="form-control" name="new_contra" id="new_contra" aria-describedby="new_contra" placeholder="Repite la contraseña">
                                  <small id="new_contra" class="form-text text-muted">Favor de repetir la contraseña para confirmar su selección.</small>
                                </div>
                            </div>
                            <div class="flex_center">
                                <button type="submit" name="contra_update_ip" class="btn btn-primary">Actualizar contraseña</button>
                            </div>
                            <?php
                        }else{
                            ?>
                            <center>
                            <div class="mb-3">
                                <label for="contra_update_select" class="form-label">Selecciona una opción:</label>
                                <select class="form-select form-select-sm" name="contra_update_select" id="contra_update_select">
                                    <option selected>Selecciona alguna opción para restaurar tu contraseña.</option>
                                    <option value="1">Correo electrónico</option>
                                    <?php
                                    if (isset($_ENV['TWILIO']) && $_ENV['TWILIO'] == 1 && $consulta['phone'] != NULL){
                                        ?>
                                        <option value="2">Restaurar contraseña por sms</option>
                                        <?php
                                    }
                                    ?>
                                </select>
                            </div>
                            <button type="submit" name="contra_update" class="btn btn-primary">Actualizar</button>
                            </center>
                            <?php
                        }
                        ?>
                    </form>
                </div>
                <?php
            }else{
                ?>
                <script>
                    Swal.fire(
                    'Falló',
                    'El correo que insertaste no existe, favor de verificarlo.',
                    'error'
                    )
                </script>
                <?php
                header("refresh:1;");
            }
        }else{
            ?>
            <script>
                Swal.fire(
                'Falló',
                'No ingresaste el recaptcha.',
                'error'
                )
            </script>
            <?php
            header("refresh:1;");
        }
    }elseif(isset($_POST['contra_update'])){
        $conexion = conect_mysqli();
        $opcion = mysqli_real_escape_string($conexion, (string) $_POST['contra_update_select']);
        $conexion ->close();
        if($opcion == 1){
            if(resetear_contra($_POST['correo']) == TRUE){
                ?>
                <script>
                    Swal.fire(
                    'Éxito',
                    'Se ha enviado un correo para restablecer tu contraseña.',
                    'success'
                    )
                </script>
                <?php
                header("refresh:1;");
            }else{
                ?>
                <script>
                    Swal.fire(
                    'Falló',
                    'No funcionó, favor de volverlo a intentar.',
                    'success'
                    )
                </script>
                <?php
                header("refresh:1;");
            }
        }elseif($opcion == 2){
            if(resetear_contra_sms($_POST['correo']) == TRUE){
                ?>
                <script>
                    Swal.fire(
                    'Éxito',
                    'Se ha enviado un sms para restablecer tu contraseña.',
                    'success'
                    )
                </script>
                <?php
                header("refresh:1;");
            }else{
                ?>
                <script>
                    Swal.fire(
                    'Falló',
                    'No funcionó, favor de volverlo a intentar una vez más, sino funciona intente con otro metodo de recuperación.',
                    'success'
                    )
                </script>
                <?php
                header("refresh:1;");
            }
        }
    }elseif(isset($_POST['contra_update_ip'])){
        $conexion = conect_mysqli();
        $correo = mysqli_real_escape_string($conexion, (string) $_POST['correo']);
        $contra = mysqli_real_escape_string($conexion, (string) $_POST['contra']);
        $new_contra = mysqli_real_escape_string($conexion, (string) $_POST['new_contra']);
        $conexion -> close();
        if($contra == $new_contra){
            $consulta_id = consulta_mysqli_where("id","users","email","'$correo'");
            if(actualizar_contra($consulta_id['id'],$contra) == TRUE){
                ?>
                <script>
                    Swal.fire(
                    'Completado',
                    'La contraseña se acaba de actualizar de manera correcta.',
                    'success'
                    )
                </script>
                <?php
                header("refresh:1;");
            }
        }else{
            ?>
            <script>
                Swal.fire(
                'Falló',
                'Las contraseñas no se parecen, favor de volverlo a intentar.',
                'error'
                )
            </script>
            <?php
            header("refresh:1;");
        }
    }elseif(isset($_POST['registrar'])){
        if(recaptcha() == TRUE){
            $conexion = conect_mysqli();
            $contra = mysqli_real_escape_string($conexion, (string) $_POST['txtPassword']);
            $contra_repeat = mysqli_real_escape_string($conexion, (string) $_POST['txtPassword_repeat']);
            if(isset($_POST['factor'])){
                $factor = "A";
            }else{
                $factor = "D";
            }
            $conexion -> close();
            if($contra == $contra_repeat){
                echo registro("users",$_POST['txtName'],$_POST['txtCorreo'],$_POST['txtPassword'],6, $factor);
                header("refresh:1;");
            }else{
                ?>
                <script>
                    Swal.fire(
                    'Falló',
                    'Las contraseñas no se parecen, favor de volverlo a intentar.',
                    'error'
                    )
                </script>
                <?php
                header("refresh:1;");
            }
        }else{
            ?>
            <script>
                Swal.fire(
                'Falló',
                'No ingresaste el recaptcha.',
                'error'
                )
            </script>
            <?php
            header("refresh:1;");
        }
    }elseif(isset($_GET['cambiar_contra'])){
        $conexion = conect_mysqli();
        $token = mysqli_real_escape_string($conexion, (string) $_GET['cambiar_contra']);
        $conexion -> close();
        if(leer_tablas_mysql_custom("SELECT id_user FROM check_users WHERE url = '$token' && accion = 'cambiar_contra'") >=1){
            $consulta = consulta_mysqli_where("id_user","check_users","url","'$token'");
            $consulta_id = consulta_mysqli_where("name","users","id",$consulta['id_user']);
            if(isset($_POST['actualizar_contra'])){
                $conexion = conect_mysqli();
                $token = mysqli_real_escape_string($conexion, (string) $_GET['cambiar_contra']);
                $contra = mysqli_real_escape_string($conexion, (string) $_POST['contra']);
                $repit_contra = mysqli_real_escape_string($conexion, (string) $_POST['repit_contra']);
                $conexion -> close();
                if(eliminar_datos_con_where("check_users","url","'$token'") == TRUE){
                    if($contra == $repit_contra){
                        if(actualizar_contra($consulta['id_user'],$contra) == TRUE){
                            ?>
                            <script>
                                Swal.fire(
                                'Completado',
                                'La contraseña se ha actualizado correctamente.',
                                'success'
                                )
                            </script>
                            <?php
                            header("refresh:1;");
                        }else{
                            ?>
                            <script>
                                Swal.fire(
                                'Falló',
                                'La contraseña no se pudo actualizar, favor de volver a intentarlo.',
                                'success'
                                )
                            </script>
                            <?php
                            header("refresh:1;");
                        }
                    }else{
                        ?>
                        <script>
                            Swal.fire(
                            'Falló',
                            'La contraseña no se parece, favor de volver a intentarlo.',
                            'success'
                            )
                        </script>
                        <?php
                        header("refresh:1;");
                    }
                }
            }
        }else{
            header("Location: panel");
        }
        ?>
        <div class="contenedor_blanco">
            <center><h1>Cambio de contraseña</h1></center>
            <p>Un gusto volver a verte <?php echo $consulta_id['name']; ?>, en unos momentos podrás restaurar tu contraseña, a continuación le pediremos que llene la nueva solicitud.</p>
            <form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">

                <div class="grid_2_auto">

                    <div class="mb-3 contenedor">
                      <label for="contra" class="form-label">Contraseña </label>
                      <input type="password"
                        class="form-control" name="contra" id="contra" aria-describedby="contra" placeholder="Pon tu nueva contraseña">
                      <small id="contra" class="form-text text-muted">Inserta la nueva contraseña.</small>
                    </div>

                    <div class="mb-3 contenedor">
                      <label for="repit_contra" class="form-label">Repite la contraseña</label>
                      <input type="password"
                        class="form-control" name="repit_contra" id="repit_contra" aria-describedby="repit_contra" placeholder="repite la contraseña">
                      <small id="repit_contra" class="form-text text-muted">Vuelve a insertar la contraseña para poder verificarla.</small>
                    </div>

                </div>

                <div class="flex_center">
                    <button type="submit" name="actualizar_contra" class="btn btn-success">Actualizar contraseña</button>
                </div>

            </form>
        </div>
        <?php
    }
?>
				
			

Versiones menores a la 2.3

Desde la versión 2.2.1, los Jossitos “login” y “login_admin” han desaparecido para darle paso al mejorado “login”.

Actualmente dispones de 3 formas para permitirle a los usuarios un acceso, esto depende del Jossito que uses, a continuación, te mostraremos los tres tipos de implementación de accesos.

Seguridad FA

La seguridad FA ya viene configurado con la lógica de acceso para ser implementado de manera directa desde el sistema de panel que viene por defecto.

A continuación, te daremos un ejemplo de su implementación:

				
					<?php
if (isset($_POST["ingresar"])){
        if(recaptcha() == TRUE){
            if(!isset($_POST['cookies'])){
                $cookies = "no";
            }else{
                $cookies = "si";
            }
            if(FA($_POST['txtCorreo'],$_POST['txtPassword'],$cookies) == "2fa"){
                ?>
                <script>
                    Swal.fire(
                    'Listo',
                    'Hemos detectado que tiene activado el acceso por alta seguridad, favor de usar tu método de acceso.',
                    'success'
                    )
                </script>
                <?php header("refresh:1;"); ?>
                <?php
            }else{
                $check = FA($_POST['txtCorreo'],$_POST['txtPassword'],$cookies);
                if($check == false){
                    ?>
                    <script>
                        Swal.fire(
                        'Falló',
                        'La contraseña es incorrecta.',
                        'error'
                        )
                    </script>
                    <?php
                    header("refresh:1;");
                }
            }
        }else{
            ?>
            <script>
                Swal.fire(
                'Falló',
                'No ingresaste el recaptcha.',
                'error'
                )
            </script>
            <?php
            header("refresh:1;");
        }
    }
?>
				
			

acceso por logins

Esta es una versión sin la seguridad FA, se recomienda usarla solamente para mantener la lógica de inicios de sesión, aquí simplemente redirecciona al usuario dependiendo de su rol.

Al igual que el sistema FA, solo puedes usarlo mientras estés usando la plantilla de panel.

				
					<?php
if(isset($_POST['login'])){
// La parte de users es la tabla donde investigará al usuario en la base de datos
    logins($_POST['correo'],$_POST['contra'],"users",$_POST['cookies']);
}
?>
				
			

acceso por login nativo

Este sistema permite customizar al 100% el acceso al usuario y no va a depender del uso de la plantilla de panel. Para usarla deberás ponerle la lógica de acceso.

				
					<?php
if(isset($_POST['login'])){
    //Primero creamos un acceso al jossito login
    $check = new login;
    //Después mandamos los datos de acceso
    $check -> correo = $_POST['correo'];
    $check -> contra = $_POST['contra'];
    $check -> cookies = $_POST['cookies'];
    //Estos datos podrás cambiarlos para tu comodidad
    
    //Con esto podrás modificar la ruta a donde mandará despues de un inicio de sesión exitoso, por defecto es "admin".
    $check -> redireccion = "users";
    //Con esto podrás modificar si deseas que cheque si es un administrador o no, en el caso de no ser un administrador no le permitirá el acceso, por defecto tiene un TRUE, si pones un FALSE no hará esta comparación sino que solo realizará el login.
    $check -> modo_admin = FALSE;
    
    //Con esto podrás compilar los datos puestos y ejecuta el login.
    $check -> compilar();
    $check -> ejecutar();
}
?>
				
			

JosSecurity te ofrece dos formas para poder iniciar sesión y un checador, la primera es invocando a un jossito llamado login y la otra es invocando a login admin.

cada tipo de login hace cosas muy semejantes, pero tienen una diferencia.

deberás crear un formulario que trabaje directamente con el archivo para evitar recargar el sitio web y dar un login, en los siguientes casos se mostrará un formulario con el nombre de “ingresar”.

Checador de logins

Existe un jossito llamado “logins”, este te ayudará a organizar el sistema de logins pues, existen dos formas de iniciar sesión, una es la forma tradicional el cuál no checa si el usuario es administrador, editor o colaborador ya que, le da acceso sin importar su rol y el otro es el jossito que sí checa si es o no un administrador, editor o colaborador.

Este jossito llamado “logins” hace una comparación donde checa que jossito debe usar dependiendo del inicio de sesión que le pide el usuario, como ejemplo podemos ver que un usuario administrador accede, el jossito “logins” captura los datos y checa el id_rol del usuario, al ser este un administrador, el jossito usa al otro jossito llamado “login_admin” para darle acceso y redireccionarlo a “./admin/”. Otro ejemplo es donde un cliente accede desde la página del panel, el jossito “logins” checa el id_rol y se da cuenta que, es un cliente así que decide llamar al jossito “login” para darle acceso y redireccionarlo a “./users/”.

A continuación te daré un ejemplo:

				
					<?php
    if (isset($_POST["ingresar"])){
        if(recaptcha() == TRUE){
            logins($_POST['txtCorreo'],$_POST['txtPassword'],"users","./admin/","./users/");
        }
        if (recaptcha() == FALSE){
            echo "
            <script>
                Swal.fire(
                'Falló',
                'El inicio de sesión ha fallado, favor de volver a intentarlo.',
                'error'
                )
            </script>";
        }
    }
?>
				
			

Login tradicional

El sistema de login consulta a la base de datos y le da acceso a TODOS los usuarios sin importar su rol, se recomienda usar a este jossito de la siguiente manera.

				
					<?php
    if (isset($_POST["ingresar"])){
        login($_POST['txtCorreo'],$_POST['txtPassword'],"users","./users/");
    }
    ?>
				
			

En el primer jossito se le insertará el atributo que llenó el usuario como correo, así mismo la contraseña que ingresó, después le ponemos la tabla a consultar, en este caso se llama “users” el cuál viene por defecto en la instalación, finalmente pones la url que redirigirá si se lleva un login correcto.

Login de administración

Este jossito hace lo mismo que el login tradicional pero, no le permite el acceso a cualquier usuario sino que, solo le permite acceso al administrador, editor y colaborador.

				
					<?php
    if (isset($_POST["ingresar"])){
        login_admin($_POST['txtCorreo'],$_POST['txtPassword'],"users","./admin/");
    }
    ?>
				
			

Volvemos a insertar los datos anteriores pues, necesita la misma información que un login tradicional.

Por defecto

Cada que haces un login por defecto se crea una sesión llamada “id_usuario”, podrás usarlo más adelante para traer información del usuario.

se recomienda usarlo de la siguiente manera:

				
					<?php

$iduser = $_SESSION['id_usuario'];

?>
				
			

Iniciar sesión de manera rápida con php