Guest User

Untitled

a guest
Aug 15th, 2018
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.69 KB | None | 0 0
  1. // Añadimos los módulos necesarios
  2. const FS = require('fs');
  3. const bodyParser = require('body-parser');
  4. const jsonServer = require('json-server');
  5. const JWT = require('jsonwebtoken');
  6. const middlewares = jsonServer.defaults()
  7.  
  8. // Servidor Express
  9. const server = jsonServer.create();
  10.  
  11. // Enrutador Express
  12. const router = jsonServer.router('./db.json');
  13.  
  14. // Creamos un JSON con los usuarios (03f996214fba4a1d05a68b18fece8e71 == MD5 Hash 'usuarios' )
  15. const userdb = JSON.parse(FS.readFileSync('./03f996214fba4a1d05a68b18fece8e71.json', 'UTF-8'));
  16.  
  17. // Middlewares predeterminados (logger, static, cors y no-cache)
  18. server.use(middlewares)
  19.  
  20. // Parseo del body
  21. server.use(jsonServer.bodyParser);
  22.  
  23. // Configuración TOKEN y duración
  24. const SECRET_KEY = 'zxcasdqwe098765';
  25. const expiresIn = '1h';
  26.  
  27. // Crear un TOKEN desde un payload
  28. createToken = (payload) => JWT.sign(payload, SECRET_KEY, { expiresIn });
  29.  
  30. // Verificar el TOKEN
  31. verifyToken = (token) => JWT.verify(token, SECRET_KEY, (err, decode) => decode !== undefined ? decode : err);
  32.  
  33. // Comprobamos si el usuario existe en nuestra 'base de datos'
  34. isAuthenticated = ({ email, password }) => userdb.users.findIndex(user => user.email === email && user.password === password) !== - 1;
  35.  
  36. // Creamos un ENDPOINT para comprobar si el usuario existe y poder crear y enviar un TOKEN
  37. server.post('/auth/login', (req, res) => {
  38. const { email, password } = req.body;
  39. if (isAuthenticated({ email, password }) === false) {
  40. const status = 401;
  41. const message = 'Contraseña y/o password incorrectos';
  42. res.status(status).json({ status, message })
  43. console.log(message);
  44. return;
  45. }
  46. const access_token = createToken({ email, password });
  47. res.status(200).json({ access_token })
  48. });
  49.  
  50. // Añadir un middleware Express que verifique si el encabezado de autorización.
  51. // Luego verificara si el token es válido para todas las rutas, excepto la ruta anterior,
  52. // ya que esta es la que usamos para iniciar sesión en los usuarios.
  53. server.use(/^(?!\/auth).*$/, (req, res, next) => {
  54. if (req.headers.authorization === undefined || req.headers.authorization.split(' ')[0] !== 'Bearer') {
  55. const status = 401;
  56. const message = 'Header con autorización incorrecta';
  57. res.status(status).json({ status, message });
  58. console.log(message);
  59. return;
  60. }
  61. try {
  62. verifyToken(req.headers.authorization.split(' ')[1]);
  63. next();
  64. } catch (err) {
  65. const status = 401;
  66. const message = 'Error: TOKEN de acceso no válido';
  67. res.status(status).json({ status, message });
  68. console.log(message);
  69. }
  70. })
  71. server.use(router);
  72.  
  73. server.listen(3000, () => {
  74. console.log('API REST FUNCIONANDO')
  75. });
Add Comment
Please, Sign In to add comment