Created
March 17, 2020 05:38
-
-
Save onimenotsuki/feb67de4ae400c21840b2da8705c8abc to your computer and use it in GitHub Desktop.
Tutorial: Parte 1: Autenticación por medio de API con JWT, ExpressJS, ReactJS y React Native -> Registro de usuarios
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Cargamos nuestros módulos | |
const Bcrypt = require('bcrypt'); | |
const jwt = require('jsonwebtoken'); | |
// Añadimos dotenv para utilizar las variables de entorno | |
const dotenv = require('dotenv'); | |
// Cargamos nuestro modelo | |
const User = require('../../models/user'); | |
// Cargamos nuestras variables de entorno | |
dotenv.config(); | |
module.exports = async ({ body }, res) => { | |
// Aquí irá nuestra action | |
const { password, passwordConfirmation, email, username } = body; | |
// Primero validamos que las contraseñas sean iguales | |
if (password === passwordConfirmation) { | |
// Creamos una instancia para guardar el usuario | |
const newUser = User({ | |
// Encriptamos el password, y ese password lo pasamos a la base de datos | |
password: Bcrypt.hashSync(password, 10), | |
email, | |
username, | |
}); | |
// Si la instancia del model se ejecutó con éxito | |
// intentamos guardarlo en nuestra base de datos | |
// utilizando una promesa (async/await) | |
try { | |
// Guardamos el usuario | |
const savedUser = await newUser.save(); | |
// Si el usuario se guardó con éxito, entonces | |
// regresamos el email, el id y el username, para firmarlo | |
// con jsonwebtoken | |
const token = jwt.sign( | |
{ email, id: savedUser.id, username }, | |
process.env.API_KEY, | |
{ expiresIn: process.env.TOKEN_EXPIRES_IN }, | |
); | |
// Cuando el usuario se firma, regresamos solamente el token | |
// ya que este contiene la información necesaria para en un | |
// futuro obtener todos los datos del usuario | |
return res.status(201).json({ token }); | |
} catch (error) { | |
// En caso que no se haya realizado la petición con éxito al guardar | |
// regresamos un error 400 con el error en el "message" de la respuesta | |
return res.status(400).json({ | |
status: 400, | |
message: error, | |
}); | |
} | |
} | |
// En caso de que las contraseñas no sean iguales | |
// retornamos un error 400 en la petición | |
return res.status(400).json({ | |
status: 400, | |
message: '¡Las contraseñas no coinciden, intenta nuevamente!', | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment