0% encontró este documento útil (0 votos)
40 vistas10 páginas

Brayan

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
40 vistas10 páginas

Brayan

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Paso 1: Crear La Base De Datos En Mysql

Primero, asegúrate de tener MySQL instalado y ejecutándose. Luego, abre tu terminal y accede a
MySQL para crear la base de datos:

-- Crear la base de datos llamada brayan123

CREATE DATABASE brayan123;

-- Usar la base de datos brayan123

USE brayan123;

-- Crear la tabla users con las columnas id, username, password y role

CREATE TABLE users (

id INT AUTO_INCREMENT PRIMARY KEY, -- Columna id, entero, autoincremental y clave


primaria

username VARCHAR(50) NOT NULL, -- Columna username, cadena de caracteres con un


máximo de 50 caracteres, no puede ser nula

password VARCHAR(100) NOT NULL, -- Columna password, cadena de caracteres con un


máximo de 100 caracteres, no puede ser nula

role ENUM('admin', 'user') NOT NULL -- Columna role, puede ser 'admin' o 'user', no puede ser
nula

);

Paso 2: Crear Archivos de la Aplicación "index.js", "panel,js", "login.js", "registro.js", "panel.js"

Index.Js:

const express = require('express');

const bodyParser = require('body-parser');

const mysql = require('mysql2');


const bcrypt = require('bcryptjs');

const jwt = require('jsonwebtoken');

const app = express();

// Configuración de la conexión a la base de datos MySQL

const db = mysql.createConnection({

host: 'localhost',

user: 'root',

password: '',

database: 'brayan123'

});

// Conexión a la base de datos MySQL

db.connect((err) => {

if (err) throw err;

console.log('Conectado a MySQL');

});

app.use(bodyParser.json()); // Middleware para parsear JSON

// Rutas para las diferentes funcionalidades

app.use('/login', require('./login')); // Ruta para el login

app.use('/register', require('./registro')); // Ruta para el registro

app.use('/panel', require('./panel')); // Ruta para el panel de usuario

const PORT = process.env.PORT || 3000; // Definición del puerto

app.listen(PORT, () => {

console.log(`Servidor corriendo en el puerto ${PORT}`);

});
Panel,Js:

const express = require('express');

const router = express.Router();

const jwt = require('jsonwebtoken');

const mysql = require('mysql2');

const PDFDocument = require('pdfkit');

const fs = require('fs');

// Configuración de la conexión a la base de datos MySQL

const db = mysql.createConnection({

host: 'localhost',

user: 'root',

password: '',

database: 'brayan123'

});

// Ruta para la descarga del archivo PDF

router.get('/download', (req, res) => {

// Obtener el token de la cabecera de autorización

const token = req.headers['authorization'];

if (!token) {

return res.status(403).send('No se proporciona ningún token'); // Enviar error si no hay token

// Verificar el token JWT

jwt.verify(token, 'secretkey', (err, decoded) => {


if (err) {

return res.status(500).send('No se pudo autenticar el token'); // Enviar error si el token no


se puede verificar

// Verificar si el usuario tiene el rol de 'admin'

if (decoded.role !== 'admin') {

return res.status(403).send('Acceso denegado'); // Enviar error si el usuario no es admin

// Consultar la base de datos para obtener los usuarios

db.query('SELECT username, role FROM users', (err, results) => {

if (err) throw err; // Lanzar error si ocurre un problema en la consulta

// Crear un nuevo documento PDF

const doc = new PDFDocument();

const filePath = './users.pdf'; // Ruta del archivo PDF

doc.pipe(fs.createWriteStream(filePath)); // Escribir el PDF en el sistema de archivos

// Agregar título al PDF

doc.text('Registered Users', { align: 'center' });

// Agregar información de cada usuario al PDF

results.forEach(user => {

doc.text(`Username: ${user.username}, Role: ${user.role}`);

});

// Finalizar el documento PDF

doc.end();
// Evento cuando el documento PDF ha terminado de generarse

doc.on('finish', () => {

// Enviar el archivo PDF como respuesta para descarga

res.download(filePath, 'users.pdf', (err) => {

if (err) throw err; // Lanzar error si ocurre un problema en la descarga

// Eliminar el archivo PDF después de la descarga

fs.unlink(filePath, (err) => {

if (err) throw err; // Lanzar error si ocurre un problema al eliminar el archivo

});

});

});

});

});

});

module.exports = router;

login.js:

const express = require('express');

const router = express.Router();

const bcrypt = require('bcryptjs');

const jwt = require('jsonwebtoken');

const mysql = require('mysql2');

// Configuración de la conexión a la base de datos

const db = mysql.createConnection({
host: 'localhost',

user: 'root',

password: '',

database: 'brayan123'

});

// Ruta para el inicio de sesión

router.post('/', (req, res) => {

const { username, password } = req.body;

// Verificar que los campos de nombre de usuario y contraseña no estén vacíos

if (!username || !password) {

return res.status(400).send('Por favor ingrese todos los campos');

// Consulta a la base de datos para buscar el usuario por nombre de usuario

db.query('SELECT * FROM users WHERE username = ?', [username], (err, results) => {

if (err) throw err;

// Verificar si el usuario no fue encontrado

if (results.length === 0) {

return res.status(400).send('Usuario no encontrado');

const user = results[0];

// Comparar la contraseña proporcionada con la contraseña almacenada en la base de datos

bcrypt.compare(password, user.password, (err, isMatch) => {

if (err) throw err;


// Verificar si las contraseñas no coinciden

if (!isMatch) {

return res.status(400).send('Contraseña incorrecta');

// Generar un token JWT con el ID y rol del usuario

const token = jwt.sign({ id: user.id, role: user.role }, 'secretkey', { expiresIn: '1h' });

// Enviar el token como respuesta

res.json({ token });

});

});

});

module.exports = router;

registro.js:

// Importar las dependencias necesarias

const express = require('express');

const router = express.Router();

const bcrypt = require('bcryptjs');

const mysql = require('mysql2');

// Configurar la conexión a la base de datos MySQL

const db = mysql.createConnection({

host: 'localhost',

user: 'root', // Usuario de la base de datos


password: '', // Contraseña de la base de datos

database: 'brayan123' // Nombre de la base de datos

});

// Ruta para manejar la solicitud POST para registrar un nuevo usuario

router.post('/', (req, res) => {

const { username, password, role } = req.body; // Extraer los datos del cuerpo de la solicitud

// Verificar que todos los campos necesarios estén presentes

if (!username || !password || !role) {

return res.status(400).send('Por favor ingrese todos los campos');

// Generar una sal para el hash de la contraseña

bcrypt.genSalt(10, (err, salt) => {

// Hashear la contraseña usando la sal generada

bcrypt.hash(password, salt, (err, hash) => {

if (err) throw err; // Manejar errores

// Insertar el nuevo usuario en la base de datos

db.query('INSERT INTO users (username, password, role) VALUES (?, ?, ?)', [username, hash,
role], (err, result) => {

if (err) throw err; // Manejar errores

res.send('Usuario(a) registrado(a)'); // Enviar respuesta de éxito

});

});

});

});
// Exportar el router para que pueda ser utilizado en otras partes de la aplicación

module.exports = router;

Paso 3: Crear el Archivo package.json:

El archivo package.json se generará automáticamente con "npm init", pero debería verse algo
así:

"name": "brayan123",

"version": "1.0.0",

"description": "",

"main": "index.js",

"scripts": {

"start": "node index.js" // Comando para iniciar la aplicación

},

"dependencies": {

"bcryptjs": "^2.4.3", // Librería para encriptar contraseñas

"body-parser": "^1.19.0", // Middleware para analizar cuerpos de solicitudes HTTP

"express": "^4.17.1", // Framework para aplicaciones web

"jsonwebtoken": "^8.5.1", // Librería para crear y verificar JSON Web Tokens

"mysql2": "^2.3.3", // Librería para interactuar con bases de datos MySQL

"pdfkit": "^0.11.0" // Generador de documentos PDF

},

"author": "",

"license": "ISC"

}
Paso 4: Configurar el Proyecto Node.js

Inicializar el proyecto y crear package.json:

 mkdir brayan123
 cd brayan123
 npm init -y
 npm install
 install nodemom
 install npm
 Install expresss

Instalar las dependencias necesarias:

 npm install express mysql2 bcryptjs jsonwebtoken body-parser pdfkit

Con estos archivos y configuraciones, tu aplicación debería estar lista para ejecutarse. Inicia el
servidor con:

 npm start

 npm run dev

Ahora puedes registrar usuarios, iniciar sesión y generar un PDF con los usuarios registrados desde
el panel.

También podría gustarte