funcinaliad del login

This commit is contained in:
Soka_jplr 2024-05-13 00:44:42 -06:00
parent 41b0f2c3aa
commit 014b5df704
10 changed files with 338 additions and 53 deletions

View File

@ -37,9 +37,11 @@ public class App
String payload = request.body(); String payload = request.body();
Alumno alumno = gson.fromJson(payload, Alumno.class); Alumno alumno = gson.fromJson(payload, Alumno.class);
boolean msj = DAO.agregarAlumno(alumno); Mensaje msj = DAO.agregarAlumno(alumno);
JsonObject respuesta = new JsonObject(); JsonObject respuesta = new JsonObject();
respuesta.addProperty("msj", msj); respuesta.addProperty("contrasena", msj.getAlumno().getContrasena());
respuesta.addProperty("matricula", msj.getAlumno().getMatricula());
respuesta.addProperty("verificacion", msj.isVerificacion());
return respuesta; return respuesta;
}); });
put("/editarAlumno", (request, response) ->{ put("/editarAlumno", (request, response) ->{
@ -58,12 +60,22 @@ public class App
respuesta.addProperty("existe", verificado); respuesta.addProperty("existe", verificado);
return respuesta; return respuesta;
}); });
get("/alumnoIniciado", (request, response) ->{
post("/alumnoIniciado", (request, response) ->{
response.type("application/json"); response.type("application/json");
String payload = request.body(); String payload = request.body();
Alumno alumno = gson.fromJson(payload, Alumno.class); Alumno alumno = gson.fromJson(payload, Alumno.class);
return gson.toJson(DAO.alumnoIniciado(alumno.getMatricula(),alumno.getContrasena())); return gson.toJson(DAO.alumnoIniciado(alumno.getMatricula(),alumno.getContrasena()));
}); });
post("/usuarioValido", (request, response) ->{
String payload = request.body();
Alumno alumno = gson.fromJson(payload, Alumno.class);
boolean verificado = DAO.validarAlumno(alumno);
JsonObject respuesta = new JsonObject();
respuesta.addProperty("existe", verificado);
return respuesta;
});
} }
} }

View File

@ -3,9 +3,10 @@ package mx.uv.Controller;
import java.sql.*; import java.sql.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Random;
import mx.uv.Model.Alumno; import mx.uv.Model.Alumno;
import mx.uv.Model.Mensaje;
public class DAO { public class DAO {
private static Conexion cn = Conexion.getInstance(); private static Conexion cn = Conexion.getInstance();
@ -23,7 +24,7 @@ public class DAO {
stm = conn.createStatement(); stm = conn.createStatement();
rs = stm.executeQuery(sql); rs = stm.executeQuery(sql);
while (rs.next()) { while (rs.next()) {
Alumno u = new Alumno(rs.getInt(1), rs.getString(2), rs.getString(3),rs.getString(4), rs.getString(5),rs.getString(6),rs.getString(7),rs.getString(8)); Alumno u = new Alumno(rs.getInt(1), rs.getString(2), rs.getString(3),rs.getString(4), rs.getString(5),rs.getString(6),rs.getString(7),rs.getString(8),rs.getString(9));
resultado.add(u); resultado.add(u);
} }
} catch (Exception e) { } catch (Exception e) {
@ -40,8 +41,8 @@ public class DAO {
ResultSet rs = null; ResultSet rs = null;
conn = cn.conectar(); conn = cn.conectar();
try { try {
String sql ="select * from usuarios " String sql ="select * from alumno "
+ "where matricula= '"+alumno.getMatricula()+"' and contrasena='"+alumno.getContrasena()+"'"; + "where matricula= '"+alumno.getMatricula()+"' and password='"+alumno.getContrasena()+"'";
stm = (Statement) conn.createStatement(); stm = (Statement) conn.createStatement();
rs = stm.executeQuery(sql); rs = stm.executeQuery(sql);
if(rs.next()){ if(rs.next()){
@ -56,31 +57,52 @@ public class DAO {
return verificacion; return verificacion;
} }
public static boolean agregarAlumno(Alumno alumno) { public static Mensaje agregarAlumno(Alumno alumno) {
Mensaje mensaje = new Mensaje();
PreparedStatement stm = null; PreparedStatement stm = null;
Connection conn = null; Connection conn = null;
boolean msj= false; boolean msj= false;
String matricula = "SIU24";
String password = crearContrasena();
matricula += 1000+ obtenerUltimoID();
alumno.setContrasena(password);
alumno.setMatricula(matricula);
conn = cn.conectar(); conn = cn.conectar();
try { try {
String sql = "INSERT INTO `alumno`(`nombre`,`apellido`,`nacionalidad`,`matricula`,`contrasena`)VALUES(?,?,?,?,?);"; String sql = "INSERT INTO `alumno`(`nombre`,`apellido`,`nacionalidad`,`matricula`,`password`, `correo`)VALUES(?,?,?,?,?,?);";
stm = (PreparedStatement) conn.prepareStatement(sql); stm = (PreparedStatement) conn.prepareStatement(sql);
stm.setString(1, alumno.getNombre()); stm.setString(1, alumno.getNombre());
stm.setString(2, alumno.getApellido()); stm.setString(2, alumno.getApellido());
stm.setString(3, alumno.getNacionalidad()); stm.setString(3, alumno.getNacionalidad());
stm.setString(4, alumno.getMatricula()); stm.setString(4, alumno.getMatricula());
stm.setString(5, alumno.getContrasena()); stm.setString(5, alumno.getContrasena());
if (stm.executeUpdate() > 0) stm.setString(6, alumno.getCorreo());
msj = true; if (stm.executeUpdate() > 0){
mensaje.setVerificacion(true);
mensaje.setAlumno(alumno);
}
else else
msj = false; mensaje.setVerificacion(false);
} catch (Exception e) { } catch (Exception e) {
System.out.println(e); System.out.println(e);
} finally { } finally {
cerrarConexiones(stm,conn); cerrarConexiones(stm,conn);
} }
return msj; return mensaje;
}
public static String crearContrasena() {
Random random = new Random();
String contrasena = "";
String CARACTERES_PERMITIDOS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@#";
for (int i = 0; i < 10; i++) {
int numero = random.nextInt(CARACTERES_PERMITIDOS.length());
char caracterAleatorio = CARACTERES_PERMITIDOS.charAt(numero);
contrasena += caracterAleatorio;
}
return contrasena.toString();
} }
private static void cerrarConexiones(PreparedStatement stm,Connection conn) { private static void cerrarConexiones(PreparedStatement stm,Connection conn) {
@ -109,7 +131,7 @@ public class DAO {
boolean verificacion =false; boolean verificacion =false;
conn = cn.conectar(); conn = cn.conectar();
try { try {
String sql ="UPDATE `alumno` SET `nombre` = '"+alumno.getNombre()+"',`apellido` = '"+alumno.getApellido()+"',`fecha_nacimiento` = '"+alumno.getFechaNacimiento()+"',`nacionalidad` = '"+alumno.getNacionalidad()+"', `tipoSangre` = '"+alumno.getTipoDeSangre()+"', `contrasena`= '"+alumno.getContrasena()+"' WHERE `id` = '"+alumno.getId()+"';"; String sql ="UPDATE `alumno` SET `nombre` = '"+alumno.getNombre()+"',`apellido` = '"+alumno.getApellido()+"',`fecha_nacimiento` = '"+alumno.getFechaNacimiento()+"',`nacionalidad` = '"+alumno.getNacionalidad()+"', `tipoSangre` = '"+alumno.getTipoDeSangre()+"', `password`= '"+alumno.getContrasena()+"' WHERE `id` = '"+alumno.getId()+"';";
stm = conn.prepareStatement(sql); stm = conn.prepareStatement(sql);
stm.executeUpdate(); stm.executeUpdate();
verificacion = true; verificacion = true;
@ -130,13 +152,13 @@ public class DAO {
conn = cn.conectar(); conn = cn.conectar();
try { try {
String sql = "SELECT * FROM alumno WHERE matricula = ? AND contrasena = ?"; String sql = "SELECT * FROM alumno WHERE matricula = ? AND password = ?";
PreparedStatement stmt = conn.prepareStatement(sql); PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, matricula); stmt.setString(1, matricula);
stmt.setString(2, contrasena); stmt.setString(2, contrasena);
rs = stmt.executeQuery(); rs = stmt.executeQuery();
while (rs.next()) { while (rs.next()) {
alumno = new Alumno(rs.getInt(1), rs.getString(2), rs.getString(3),rs.getString(4), rs.getString(5),rs.getString(6),rs.getString(7),rs.getString(8)); alumno = new Alumno(rs.getInt(1), rs.getString(2), rs.getString(3),rs.getString(4), rs.getString(5),rs.getString(6),rs.getString(7),rs.getString(8),rs.getString(9));
} }
} catch (Exception e) { } catch (Exception e) {
System.out.println(e); System.out.println(e);
@ -145,4 +167,34 @@ public class DAO {
} }
return alumno; return alumno;
} }
public static int obtenerUltimoID() {
Connection conn = null;
Statement stm = null;
ResultSet rs = null;
int ultimoID = -1;
try {
conn = cn.conectar();
String sql = "SELECT MAX(id) AS ultimo_id FROM alumno";
stm = conn.createStatement();
rs = stm.executeQuery(sql);
if (rs.next()) {
ultimoID = rs.getInt("ultimo_id");
}
} catch (SQLException ex) {
System.err.println(ex);
} finally {
// Cerrar recursos
try {
if (rs != null) rs.close();
if (stm != null) stm.close();
if (conn != null) conn.close();
} catch (SQLException ex) {
System.err.println(ex);
}
}
return ultimoID;
}
} }

View File

@ -9,9 +9,10 @@ public class Alumno {
private String tipoDeSangre; private String tipoDeSangre;
private String matricula; private String matricula;
private String contrasena; private String contrasena;
private String correo;
public Alumno(int id, String nombre, String apellido, String fechaNacimiento, String nacionalidad, public Alumno(int id, String nombre, String apellido, String fechaNacimiento, String nacionalidad,
String tipoDeSangre, String matricula, String contrasena) { String tipoDeSangre, String matricula, String contrasena, String correo) {
this.id = id; this.id = id;
this.nombre = nombre; this.nombre = nombre;
this.apellido = apellido; this.apellido = apellido;
@ -20,17 +21,20 @@ public class Alumno {
this.tipoDeSangre = tipoDeSangre; this.tipoDeSangre = tipoDeSangre;
this.matricula = matricula; this.matricula = matricula;
this.contrasena = contrasena; this.contrasena = contrasena;
this.correo = correo;
} }
public Alumno() { public Alumno() {
} }
public Alumno(String nombre, String apellido, String nacionalidad, String matricula, String contrasena) { public Alumno(String nombre, String apellido, String nacionalidad, String matricula, String contrasena,String correo) {
this.nombre = nombre; this.nombre = nombre;
this.apellido = apellido; this.apellido = apellido;
this.nacionalidad = nacionalidad; this.nacionalidad = nacionalidad;
this.matricula = matricula; this.matricula = matricula;
this.contrasena = contrasena; this.contrasena = contrasena;
this.correo = correo;
} }
public Alumno(String matricula, String contrasena) { public Alumno(String matricula, String contrasena) {
@ -38,8 +42,6 @@ public class Alumno {
this.contrasena = contrasena; this.contrasena = contrasena;
} }
public void setId(int id) { public void setId(int id) {
this.id = id; this.id = id;
} }
@ -89,6 +91,16 @@ public class Alumno {
public String getContrasena() { public String getContrasena() {
return contrasena; return contrasena;
} }
public String getCorreo() {
return correo;
}
public void setCorreo(String correo) {
this.correo = correo;
}
} }

View File

@ -0,0 +1,26 @@
package mx.uv.Model;
public class Mensaje {
private boolean verificacion;
private Alumno alumno;
public Mensaje(){
};
public Mensaje(boolean verificacion, Alumno alumno) {
this.verificacion = verificacion;
this.alumno = alumno;
}
public boolean isVerificacion() {
return verificacion;
}
public Alumno getAlumno() {
return alumno;
}
public void setVerificacion(boolean verificacion) {
this.verificacion = verificacion;
}
public void setAlumno(Alumno alumno) {
this.alumno = alumno;
}
}

View File

@ -11,7 +11,9 @@
"axios": "^1.6.8", "axios": "^1.6.8",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-dropzone": "^14.2.3" "react-dropzone": "^14.2.3",
"react-router": "^6.23.1",
"react-router-dom": "^6.23.1"
}, },
"devDependencies": { "devDependencies": {
"@types/react": "^18.2.66", "@types/react": "^18.2.66",
@ -929,6 +931,14 @@
"node": ">= 8" "node": ">= 8"
} }
}, },
"node_modules/@remix-run/router": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz",
"integrity": "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==",
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@rollup/rollup-android-arm-eabi": { "node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.14.3", "version": "4.14.3",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.3.tgz",
@ -3668,6 +3678,36 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/react-router": {
"version": "6.23.1",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.1.tgz",
"integrity": "sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==",
"dependencies": {
"@remix-run/router": "1.16.1"
},
"engines": {
"node": ">=14.0.0"
},
"peerDependencies": {
"react": ">=16.8"
}
},
"node_modules/react-router-dom": {
"version": "6.23.1",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.1.tgz",
"integrity": "sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==",
"dependencies": {
"@remix-run/router": "1.16.1",
"react-router": "6.23.1"
},
"engines": {
"node": ">=14.0.0"
},
"peerDependencies": {
"react": ">=16.8",
"react-dom": ">=16.8"
}
},
"node_modules/reflect.getprototypeof": { "node_modules/reflect.getprototypeof": {
"version": "1.0.6", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",

View File

@ -13,7 +13,9 @@
"axios": "^1.6.8", "axios": "^1.6.8",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-dropzone": "^14.2.3" "react-dropzone": "^14.2.3",
"react-router": "^6.23.1",
"react-router-dom": "^6.23.1"
}, },
"devDependencies": { "devDependencies": {
"@types/react": "^18.2.66", "@types/react": "^18.2.66",

View File

@ -1,7 +1,61 @@
import React from 'react'; import React, {useState} from 'react';
import axios from 'axios'
import './Registro.css'; // Estilo para el formulario import './Registro.css'; // Estilo para el formulario
function Registro(){ function Registro(){
const [Cargando, setCargando] = useState(false);
const [alumno, setAlumno] = useState({
nombre: "",
apellido: "",
nacionalidad: "",
correo: "",
});
const limpiar = () => {
setAlumno((prevAlumno) => ({
...prevAlumno,
nombre: "",
apellido: "",
nacionalidad: "",
correo: "",
}));
};
const hacerPeticion = async () => {
try {
const res = await axios.post("http://localhost:4567/agregarAlumno", alumno);
return res.data;
} catch (error) {
throw error;
}
};
const procesarFormulario = async (e) => {
e.preventDefault();
setCargando(true);
try {
const res = await hacerPeticion();
setCargando(false);
if (res.verificacion) {
limpiar();
alert("Producto Registrado Correctamente" + "Contraseña: " + res.contrasena +" Matricula: " +res.matricula);
} else {
alert("Error Producto No registrado");
}
} catch (error) {
console.log(error);
setCargando(false);
}finally{
}
};
const cambiosAlumno = (e) => {
const { name, value } = e.target;
setAlumno({
...alumno,
[name]: value,
});
};
return ( return (
<div className="formulario"> <div className="formulario">
@ -10,27 +64,24 @@ function Registro(){
<form className='form'> <form className='form'>
<div className="campo"> <div className="campo">
<label htmlFor="nombre">Nombre:</label> <label htmlFor="nombre">Nombre:</label>
<input type="text" id="nombre" name='nombre' />
<input type="text" id="nombre" onChange={cambiosAlumno} name='nombre' value={alumno.nombre} />
</div> </div>
<div className="campo"> <div className="campo">
<label htmlFor="apellidoPaterno">Apellido Paterno:</label> <label htmlFor="apellidoPaterno">Apellidos:</label>
<input type="text" id="apellidoPaterno" name='apellidoPaterno' /> <input type="text" id="apellidoPaterno" onChange={cambiosAlumno} name='apellido' value={alumno.apellido} />
</div>
<div className="campo">
<label htmlFor="apellidoMaterno">Apellido Materno:</label>
<input type="text" id="apellidoMaterno" name="apellidoMaterno" />
</div> </div>
<div className="campo"> <div className="campo">
<label htmlFor="nacionalidad">Nacionalidad:</label> <label htmlFor="nacionalidad">Nacionalidad:</label>
<input type="text" id="nacionalidad" name="nacionalidad" /> <input type="text" id="nacionalidad" onChange={cambiosAlumno} name="nacionalidad" value={alumno.nacionalidad} />
</div> </div>
<div className="campo"> <div className="campo">
<label htmlFor="correo">Correo:</label> <label htmlFor="correo">Correo:</label>
<input type="correo" id="correo" name="correo" /> <input type="email" id="correo" onChange={cambiosAlumno} name="correo" value={alumno.correo} />
</div> </div>
</form> </form>
<div> <div>
<button type="submit" className='boton'>Registrarse</button> <button type="submit" className='boton' disabled={Cargando} onClick={procesarFormulario}>Registrarse</button>
</div> </div>
</div> </div>

View File

@ -111,3 +111,8 @@ div a{
font-weight: bold; font-weight: bold;
} }
.gridContainer{
width: 50%; /* Puedes ajustar esto según tus necesidades */
margin: 0 auto;
}

View File

@ -1,6 +1,88 @@
import './login.css' import React, {useState} from 'react';
import './login.css';
import { Link } from 'react-router-dom';
import axios from 'axios';
function Login() { function Login() {
const [Cargando, setCargando] = useState(false);
const [datosUsuario, setDatosUsuario] = useState({
matricula: "",
contrasena: "",
});
const [usuario, setUsuario] = useState({
id: 0,
nombre: "",
contrasena: "",
correo: "",
});
const limpiar = () => {
setDatosUsuario((prev) => ({
matricula: "",
contrasena: "",
}));
};
//peticion al Backend para ver si el usuario existe en la BD
const hacerPeticion = async () => {
try {
const res = await axios.post(
"http://localhost:4567/usuarioValido",
datosUsuario
);
return res.data;
} catch (error) {
throw error;
}
};
//peticion al Backend para regresar el usuario Iniciado
const obtenerUsuario = async () => {
try {
const res = await axios.post(
"http://localhost:4567/alumnoIniciado",
datosUsuario
);
return res.data;
} catch (error) {
throw error;
}
};
//prosesamiento de Uusario.
const procesarFormulario = async (e) => {
e.preventDefault();
setCargando(true);
try {
const res = await hacerPeticion();
setCargando(false);
if (res.existe) {
const aux = await obtenerUsuario();
setUsuario({
id: aux.id,
nombre: aux.nombre,
contrasena: aux.contrasena,
correo: aux.correo,
});
alert("¡Bienvenido! " + aux.nombre);
limpiar();
window.location.href = '/home';
} else {
alert("Usuario No encontrado");
}
} catch (error) {
console.log(error);
setCargando(false);
}
};
const cambiosUsuario = (e) => {
const { name, value } = e.target;
setDatosUsuario({
...datosUsuario,
[name]: value,
});
};
return ( return (
<> <>
<body> <body>
@ -12,11 +94,12 @@ function Login() {
<div className='loginColum'> <div className='loginColum'>
<h1>Bienvenido</h1> <h1>Bienvenido</h1>
<form className='Formulario'> <form className='Formulario'>
<label id='usuario'>Usuario:</label> <label id='usuario'>Matricula:</label>
<input type='text' id='usuario'/> <input type='text' id='usuario' onChange={cambiosUsuario} value={datosUsuario.matricula} name='matricula'/>
<label>Contraseña:</label> <label>Contraseña:</label>
<input type="password" id='password'/> <input type="password" id='password' onChange={cambiosUsuario} value={datosUsuario.contrasena} name='contrasena'/>
<button id='button' >Iniciar sesion</button> <a><Link to='/registro'>¿Aún no te has registrado?</Link></a>
<button id='button' typeof='submit' disabled={Cargando} onClick={procesarFormulario} >Iniciar sesion</button>
</form> </form>
</div> </div>
</div> </div>

View File

@ -1,16 +1,18 @@
import React from 'react' import React from 'react';
import ReactDOM from 'react-dom/client' import { createRoot } from 'react-dom/client'; // Importar desde "react-dom/client"
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import Login from './login.jsx'
import Registro from './Registro.jsx';
import OfertaEducativa from './OfertaEducativa.jsx' import OfertaEducativa from './OfertaEducativa.jsx'
createRoot(document.getElementById('root')).render(
import './Registro.css' <React.StrictMode>
import './login.css' <Router>
<Routes>
<Route path='/' element={<Login />} />
ReactDOM.createRoot(document.getElementById('root')).render( <Route path='/registro' element={<Registro />} />
<React.StrictMode> <Route path='/home' element={<OfertaEducativa />}/>
<OfertaEducativa/> </Routes>
</React.StrictMode>, </Router>
) </React.StrictMode>
);