PHP - Proteger formulario después de validación

 
Vista:
Imágen de perfil de Miguel

Proteger formulario después de validación

Publicado por Miguel (9 intervenciones) el 12/04/2022 20:25:50
Hola, tengo un proceso de validación de correo electrónico realizado en JavaScript, este lo realizo en la pagina índex, donde le pregunto al usuario el correo electrónico. el usuario recibe un código que debe poner en la pagina y así le redirecciona a un formulario.

El problema que tengo es que intento evitar que puedan entrar en el formulario sin pasar por índex, pero no me funciona la opción de session_start();

Mi archivo índex es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<!DOCTYPE html>
<html lang="es">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <title>Análisis de optimización IT</title>
</head>
 
<body>
 
    <div class="container mt-2">
        <div class="row">
            <div class="col-md-4 offset-md-4">
                <div class="alert" role="alert"></div>
                <div class="login-form bg-light mt-4 p-4 shadow">
                    <div class="row g-3">
                        <img src="img\logo_konica.png">
                        <h4 class="text-center">Análisis de optimización IT</h4>
                        <div class="col-12">
                            <label id="lbl">Ingrese correo corporativo</label>
                            <input type="text" id="mail" class="form-control">
                        </div>
                        <div class="col-12">
                            <button id="submit" class="btn btn-dark float-end">solicitar</button>
                        </div>
                    </div>
                    <hr class="mt-4">
                    <div class="col-12">
                        <p class="text-center mb-0 fs-6">Ingrese su correo corporativo y se le enviará un código de verificación</p>
                    </div>
                </div>
            </div>
        </div>
    </div>
 
    <!-- Bootstrap JS -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous">
    </script>
 
    <script>
        let dism = '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>';
        const alerta = document.querySelector('.alert');
        submit.addEventListener('click', (e) => {
            limpiaAlerta(alerta);
            if (submit.innerHTML == 'solicitar') {
                e.preventDefault();
                if (mail.value == '') {
                    alerta.classList.add('show', 'alert-danger', 'alert-dismissible', 'fade');
                    alerta.innerHTML = 'Se requiere ingrese un correo' + dism;
                } else {
                    limpiaAlerta(alerta);
                    if (validaEmail(mail.value)) {
                        alerta.classList.add('show', 'alert-info', 'alert-dismissible', 'fade');
                        alerta.innerHTML = 'Estamos enviando un codigo a su correo...';
                        submit.innerHTML = '<div class="spinner-border spinner-border-sm" role="status"></div>';
                        fetch('php/recibe.php', {
                            method: 'POST',
                            body: JSON.stringify({
                                'mail': mail.value
                            }),
                            headers: {
                                'Content-Type': 'application/json'
                            }
                        }).then(res => res.text()).then(res => {
                            if (res.trim() == 'enviado') {
                                submit.innerHTML = 'Ingrese';
                                limpiaAlerta(alerta);
                                alerta.classList.add('show', 'alert-secondary', 'alert-dismissible',
                                    'fade');
                                alerta.innerHTML = 'Ingrese el codigo enviado a su correo';
                                mail.value = '';
                                lbl.innerHTML = 'Ingrese codigo:';
                            } else {
                                submit.innerHTML = 'solicitar';
                                limpiaAlerta(alerta);
                                alerta.classList.add('show', 'alert-danger', 'alert-dismissible', 'fade');
                                alerta.innerHTML = 'No se pudo enviar el correo';
                            }
                        });
                    } else {
                        limpiaAlerta(alerta);
                        alerta.classList.add('show', 'alert-warning', 'alert-dismissible', 'fade');
                        alerta.innerHTML = 'El correo no es valido' + dism;
                    }
                }
 
            } else {
                submit.innerHTML = '<div class="spinner-border spinner-border-sm" role="status"></div>';
                fetch('php/verifica.php', {
                    method: 'POST',
                    body: JSON.stringify({
                        'codigo': mail.value
                    }),
                    headers: {
                        'Content-Type': 'application/json'
                    }
                }).then(res => res.text()).then(res => {
                    limpiaAlerta(alerta);
                    if (res.trim() == 'verificado') {
                        alerta.classList.add('show', 'alert-success', 'alert-dismissible', 'fade');
                        alerta.innerHTML = 'Bienvenido' + dism;
                        window.location.href = "from/solicitud.php";
                        submit.innerHTML = 'solicitar';
                        submit.disabled = true;
                    } else {
                        alerta.classList.add('show', 'alert-danger', 'alert-dismissible', 'fade');
                        alerta.innerHTML = 'No pudimos verificar su codigo' + dism;
                        submit.innerHTML = 'Ingrese';
                    }
                });
            }
        });
        const limpiaAlerta = (elem) => {
            elem.classList.remove('show', 'alert-danger', 'alert-warning', 'alert-success', 'alert-info',
                'alert-secondary', 'alert-dismissible', 'fade');
            elem.innerHTML = '';
        }
        const validaEmail = (valor) => {
            let verificacion = /^(?!\.)[a-zA-Z0-9._-]+@gmail+.[a-zA-Z]{2,4}$/;
            return verificacion.test(valor);
        }
    </script>
</body>
 
</html>

Y en la pagina de de formulario, estoy poniendo esto en la cabecera, y aunque valide, me esta redireccionando a index, no me coge la verificación.

1
2
3
4
5
6
7
8
9
10
<?php
// Initialize the session
session_start();
 
// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== 'verificado'){
    header("location: ../index.php");
    exit;
}
?>

¿Qué estoy haciendo mal
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Proteger formulario después de validación

Publicado por antonio (16 intervenciones) el 13/04/2022 15:17:18
Hola buenas, debes inicializar el $_SESSION["loggedin"] en php de alguna forma para que te deje entrar en la otra pagina. Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Proteger formulario después de validación

Publicado por Ivan (118 intervenciones) el 13/04/2022 19:26:51
Hola,

se que puede sonar muy simple pero tal vez no debas utilizar el operador de desiagualdad estricta.

1
2
3
4
5
6
7
8
9
<?php
// Initialize the session
session_start();
// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] != 'verificado'){
    header("location: ../index.php");
    exit;
}
?>

Yo en mis aplicaciones no lo uso y funciona correctamente.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Miguel

Proteger formulario después de validación

Publicado por Miguel (9 intervenciones) el 14/04/2022 14:07:30
Hola Iván,

Hice la prueba como me comentas, pero no funciona igual, ya no consigo que esto valide que verifique mi sesión previamente con el código enviado por mail y que me restrinja el acceso a las paginas si no esta validado el acceso.

Me tiene bloqueado esto por completo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Miguel

Proteger formulario después de validación

Publicado por Miguel (9 intervenciones) el 14/04/2022 14:09:11
Hola Antonio

El caso es que necesito que sea una validación de correo no usuarios y contraseñas, por eso el usuario no hace loggin sino verifica su correo por medio de un código que se le envía a su mail.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Proteger formulario después de validación

Publicado por Ivan (118 intervenciones) el 14/04/2022 20:21:41
Hola Miguel,

el código, en teoría, parece que está bién.
Sólo se me ocurre errores de esos absurdos como que el contenido de $_SESSION["loggedin"] es Verificar con V o cosas así ...
Pero supongo que si has comprobado el valor de la variable $_SESSION["loggedin"] cuando llega al formulario y es correcta, la verdad que no le encuentro explicación.

Todos sabemos que a veces hay duendes en el código así que en estos casos yo suelo cambiar el condicional por un AND, añadir paréntesis, etc.

1
2
3
4
5
6
7
8
9
10
11
12
<?php
// Initialize the session
session_start();
 
// Check if the user is logged in, if not then redirect him to login page
if(isset($_SESSION["loggedin"]) && ($_SESSION["loggedin"] == "verificado")) {
    código si loggedin
} else {
    header("location: ../index.php");
    exit;
}
?>

Espero que te sirva de inspiración,

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar