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();
Alumno alumno = gson.fromJson(payload, Alumno.class);
boolean msj = DAO.agregarAlumno(alumno);
Mensaje msj = DAO.agregarAlumno(alumno);
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;
});
put("/editarAlumno", (request, response) ->{
@ -58,12 +60,22 @@ public class App
respuesta.addProperty("existe", verificado);
return respuesta;
});
get("/alumnoIniciado", (request, response) ->{
post("/alumnoIniciado", (request, response) ->{
response.type("application/json");
String payload = request.body();
Alumno alumno = gson.fromJson(payload, Alumno.class);
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.util.ArrayList;
import java.util.List;
import java.util.Random;
import mx.uv.Model.Alumno;
import mx.uv.Model.Mensaje;
public class DAO {
private static Conexion cn = Conexion.getInstance();
@ -23,7 +24,7 @@ public class DAO {
stm = conn.createStatement();
rs = stm.executeQuery(sql);
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);
}
} catch (Exception e) {
@ -40,8 +41,8 @@ public class DAO {
ResultSet rs = null;
conn = cn.conectar();
try {
String sql ="select * from usuarios "
+ "where matricula= '"+alumno.getMatricula()+"' and contrasena='"+alumno.getContrasena()+"'";
String sql ="select * from alumno "
+ "where matricula= '"+alumno.getMatricula()+"' and password='"+alumno.getContrasena()+"'";
stm = (Statement) conn.createStatement();
rs = stm.executeQuery(sql);
if(rs.next()){
@ -56,31 +57,52 @@ public class DAO {
return verificacion;
}
public static boolean agregarAlumno(Alumno alumno) {
public static Mensaje agregarAlumno(Alumno alumno) {
Mensaje mensaje = new Mensaje();
PreparedStatement stm = null;
Connection conn = null;
boolean msj= false;
String matricula = "SIU24";
String password = crearContrasena();
matricula += 1000+ obtenerUltimoID();
alumno.setContrasena(password);
alumno.setMatricula(matricula);
conn = cn.conectar();
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.setString(1, alumno.getNombre());
stm.setString(2, alumno.getApellido());
stm.setString(3, alumno.getNacionalidad());
stm.setString(4, alumno.getMatricula());
stm.setString(5, alumno.getContrasena());
if (stm.executeUpdate() > 0)
msj = true;
stm.setString(6, alumno.getCorreo());
if (stm.executeUpdate() > 0){
mensaje.setVerificacion(true);
mensaje.setAlumno(alumno);
}
else
msj = false;
mensaje.setVerificacion(false);
} catch (Exception e) {
System.out.println(e);
} finally {
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) {
@ -109,7 +131,7 @@ public class DAO {
boolean verificacion =false;
conn = cn.conectar();
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.executeUpdate();
verificacion = true;
@ -130,13 +152,13 @@ public class DAO {
conn = cn.conectar();
try {
String sql = "SELECT * FROM alumno WHERE matricula = ? AND contrasena = ?";
String sql = "SELECT * FROM alumno WHERE matricula = ? AND password = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, matricula);
stmt.setString(2, contrasena);
rs = stmt.executeQuery();
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) {
System.out.println(e);
@ -145,4 +167,34 @@ public class DAO {
}
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 matricula;
private String contrasena;
private String correo;
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.nombre = nombre;
this.apellido = apellido;
@ -20,17 +21,20 @@ public class Alumno {
this.tipoDeSangre = tipoDeSangre;
this.matricula = matricula;
this.contrasena = contrasena;
this.correo = correo;
}
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.apellido = apellido;
this.nacionalidad = nacionalidad;
this.matricula = matricula;
this.contrasena = contrasena;
this.correo = correo;
}
public Alumno(String matricula, String contrasena) {
@ -38,8 +42,6 @@ public class Alumno {
this.contrasena = contrasena;
}
public void setId(int id) {
this.id = id;
}
@ -91,4 +93,14 @@ public class Alumno {
}
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",
"react": "^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": {
"@types/react": "^18.2.66",
@ -929,6 +931,14 @@
"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": {
"version": "4.14.3",
"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_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": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",

View File

@ -13,7 +13,9 @@
"axios": "^1.6.8",
"react": "^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": {
"@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
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 (
<div className="formulario">
@ -10,27 +64,24 @@ function Registro(){
<form className='form'>
<div className="campo">
<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 className="campo">
<label htmlFor="apellidoPaterno">Apellido Paterno:</label>
<input type="text" id="apellidoPaterno" name='apellidoPaterno' />
</div>
<div className="campo">
<label htmlFor="apellidoMaterno">Apellido Materno:</label>
<input type="text" id="apellidoMaterno" name="apellidoMaterno" />
<label htmlFor="apellidoPaterno">Apellidos:</label>
<input type="text" id="apellidoPaterno" onChange={cambiosAlumno} name='apellido' value={alumno.apellido} />
</div>
<div className="campo">
<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 className="campo">
<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>
</form>
<div>
<button type="submit" className='boton'>Registrarse</button>
<button type="submit" className='boton' disabled={Cargando} onClick={procesarFormulario}>Registrarse</button>
</div>
</div>

View File

@ -111,3 +111,8 @@ div a{
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() {
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 (
<>
<body>
@ -12,11 +94,12 @@ function Login() {
<div className='loginColum'>
<h1>Bienvenido</h1>
<form className='Formulario'>
<label id='usuario'>Usuario:</label>
<input type='text' id='usuario'/>
<label id='usuario'>Matricula:</label>
<input type='text' id='usuario' onChange={cambiosUsuario} value={datosUsuario.matricula} name='matricula'/>
<label>Contraseña:</label>
<input type="password" id='password'/>
<button id='button' >Iniciar sesion</button>
<input type="password" id='password' onChange={cambiosUsuario} value={datosUsuario.contrasena} name='contrasena'/>
<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>
</div>
</div>

View File

@ -1,16 +1,18 @@
import React from 'react'
import ReactDOM from 'react-dom/client'
import React from 'react';
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 './Registro.css'
import './login.css'
ReactDOM.createRoot(document.getElementById('root')).render(
createRoot(document.getElementById('root')).render(
<React.StrictMode>
<OfertaEducativa/>
</React.StrictMode>,
)
<Router>
<Routes>
<Route path='/' element={<Login />} />
<Route path='/registro' element={<Registro />} />
<Route path='/home' element={<OfertaEducativa />}/>
</Routes>
</Router>
</React.StrictMode>
);