No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Reto de seguridad en Node.js

3/6
Recursos

Aportes 3

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

bcrypt.hashSync y bcrypt.compareSync, se ejecute de manera sincrona y genera el salting automaticamente.

const rounds = 10
function hashPassword(password) {
    const hash = bcrypt.hashSync(password,rounds)
    return hash
}

function matchWithHash(password,hash) {
    const isValidate = bcrypt.compareSync(password,hash)
    return isValidate
}

Para los que tenga problemas al momento de hacer las peticiones ya sea con POSTMAN u otro software de HTTP Request, aveces es necesario instalar la biblioteca bcrypt con una versión en específica.

npm install bcrypt@5.0.0.

Esto ocurre generalmente para los que tenemos un macOS inferior a catalina

Usando bcrypt para las contraseñas

async (request, response) => {
    try {
      const errors = validationResult(request);
      if (!errors.isEmpty()) {
        return response.status(400).json({ errors: errors.array() });
      }

      const { username, password } = request.body;

      //encriptar password para seguridad 
      const encryptedPassword= await bcrypt.hash(password, 10)

      //guardar la password que sera encriptada en la db
      const user = await UserModel.create({ username, password: encryptedPassword });

      return response
        .status(201)
        .json({ username: user.username, createdAt: user.createdAt });

En carpeta helpers crear uno para firmar los tokens

import jwt from "jsonwebtoken"

export const generate_jwt = (id,username) =>{
    try {
        const token = jwt.sign({id:id,username:username,}, process.env.SECRET, {expiresIn:60*8})
        return token
    } catch (error) {
        console.log(error)
        
    }
}

creamos un middleware para validar el token en los headers

export const require_token = (req,res, next)=>{
    try {
        let token = req.headers.authorization

        if(!token){
            throw new Error("No hay token en el header, no tienes acceso a esta ruta, usa Bearer")

        }
         token= token.split(" ")[1]
         const payload = jwt.verify(token, process.env.SECRET)

         console.log(payload)
         next()

        
    } catch (error) {
        return res.status(401).json({
            error: error.message
        })
        
    }

}

despues lo usamos

profile.use('/', require_token,viewUser);