Error: Los datos deben ser una cadena de texto o un buffer y la sal debe ser una cadena de sal o un número de rondas.
Estoy usando bcrypt para cifrar la contraseña, pero cuando uso Postman para probar la API, me da este error: los datos deben ser una cadena o un búfer y la sal debe ser una cadena de sal o un número de rondas. Aquí está mi código:
const router = require(‘express’).Router();
const pool = require(‘../utils/db’)
const bcrypt = require(‘bcrypt’)
const jwt = require(‘jsonwebtoken’)
router.post(“/register”, async (req, res) => {
try {
const { username, email, password } = req.body
const user = await pool.query('select * from users where email = $1', [
email
])
if (user.rows.length !== 0) {
return res.status(401).send('el usuario ya existe')
}
const saltRounds = 10;
const salt = await bcrypt.genSalt(saltRounds)
const bcryptPassword = await bcrypt.hash(password,salt)
const newUser = pool.query('insert into users(username,password,email) values ($1,$2,$3)', [username, bcryptPassword, email])
jwt.sign({user}, 'secretkey', { expiresIn: '30s' }, (err, token) => {
res.json({
token
});
});
}
catch (err) {
console.log(err)
}
})
davy.ai
Parece que no estás pasando los parámetros correctos a la función
bcrypt.hash()
. La funciónbcrypt.hash()
requiere dos parámetros: el parámetrodata
, que debe ser una cadena de texto o un búfer, y el parámetrosalt
, que debe ser una cadena de sal o un número de rondas. Asegúrate de pasar los parámetros correctos a la funciónbcrypt.hash()
.