Advertisement
ADL_Rodrigo_Silva

Untitled

Jul 25th, 2022
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const User = require('../models/User');
  2.  
  3. const router = require('express').Router();
  4. const Joi = require('@hapi/joi');
  5. const bcrypt = require('bcrypt');
  6. const jwt = require('jsonwebtoken');
  7.  
  8. // Scheme para Registrar Usuario
  9. const schemeRegister = Joi.object({
  10.     name: Joi.string().min(6).max(255).required(),
  11.     email: Joi.string().min(6).max(255).required().email(),
  12.     password: Joi.string().min(6).max(1024).required()
  13. });
  14.  
  15. // Scheme para realizar el Login del Usuario
  16. const schemeLogin = Joi.object({
  17.     email: Joi.string().min(6).max(255).required().email(),
  18.     password: Joi.string().min(6).max(1024).required()
  19. });
  20.  
  21. // Código para redirigir a página de registro
  22. router.get('/paginaRegistro', (request, response) =>
  23. {
  24.     response.render("registrar");
  25. });
  26.  
  27. // Código para redirigir a página de registro
  28. router.get('/paginaLogin', (request, response) =>
  29. {
  30.     response.render("login");
  31. });
  32.  
  33. // Código para logear a un usuario
  34. router.post('/login', async (request, response) =>
  35. {
  36.     // Validaciones
  37.     const { error } = schemeLogin.validate(request.body);
  38.     if (error)
  39.         return response.render("404", {
  40.             error: error.details[0].message,
  41.             mensaje: "Se ha producido un error"
  42.         })
  43.  
  44.     // Verificamos si el usuario existe (su email)
  45.     const user = await User.findOne({ email: request.body.email });
  46.     if (!user)
  47.         return response.render("404", {
  48.             error: 'Usuario No Encontrado',
  49.             mensaje: "Se ha producido un error"
  50.         })
  51.  
  52.     // Verificar el password del usuario
  53.     const validPassword = await bcrypt.compare(request.body.password, user.password);
  54.     if (!validPassword)
  55.         return response.render("404", {
  56.             error: 'Contraseña no válida',
  57.             mensaje: "Se ha producido un error"
  58.         })
  59.    
  60.     // Creamos el Token
  61.     const token = jwt.sign({
  62.         name: user.name,
  63.         id: user._id
  64.     }, process.env.TOKEN_SECRET);
  65.  
  66.  
  67.     response.render("exito", {
  68.         error: null,
  69.         mensaje: "Bienvenido"
  70.     })
  71.  
  72.     // Validar los datos
  73.     // Verificar que existe el usuario
  74.     // Tomar la contraseña y comparar con la contraseña de la BD. Para ello tenemos que desencriptar la password que está en la bbdd
  75.     // Si todo sale bien, mandamos un mensaje de bienvenida
  76.     // Pongamos un Token
  77. }),
  78.  
  79. // Método para registrar a un usuario. Lo conservan como API
  80. router.post('/register', async (request, response) =>
  81. {
  82.     // Validación de la data que nos llega por el request
  83.  
  84.     const { error } = schemeRegister.validate(request.body);
  85.  
  86.     if (error) {
  87.         return response.render("404", {
  88.             error: error.details[0].message,
  89.             mensaje: "Hay un error"
  90.         })
  91.     }
  92.  
  93.     // Verifico si existe un usuario con un email determinado
  94.     const isEmailExist = await User.findOne({ email: request.body.email });
  95.     if (isEmailExist) {
  96.         return response.render("404", {
  97.             error: "El usuario ya existe",
  98.             mensaje: "Se ha producido un error"
  99.         })
  100.     }
  101.  
  102.     // Encriptación del password
  103.     const salt = await bcrypt.genSalt(10);
  104.     const password = await bcrypt.hash(request.body.password, salt);
  105.  
  106.     // Creación de nuestro usuario
  107.     const user = new User(
  108.         {
  109.             name: request.body.name,
  110.             email: request.body.email,
  111.             password: password
  112.         });
  113.    
  114.     try {
  115.         const savedUser = await user.save();
  116.  
  117.         response.render("exito", {
  118.             error: null,
  119.             mensaje: "El registro se ha realizado con éxito"
  120.         })
  121.  
  122.     } catch (error) {
  123.         response.render("404", {
  124.             error: error,
  125.             mensaje: "Se ha producido un error"
  126.         })
  127.     }
  128.    
  129. });
  130.  
  131. module.exports = router;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement