Aquí estoy usando el paquete bcrypt, pero cuando trato de crear un usuario con el cliente Thunder en Visual Studio, no está realizando el hash, la contraseña no se almacena con el valor hash, ya que he escrito el código debajo const salt y const secPass .
Esto es nodejs, expresjs:
const express = require('express'); const router = express.Router(); const User = require('../models/User'); const { body, validationResult } = require('express-validator'); const bcrypt = require('bcryptjs'); router.post('/',[ body('name').isLength({ min: 3 }), body('email').isEmail(), body('password').isLength({ min: 5 }) ] ,async(req,res)=>{ //if there are any errors it sends bad request 400 const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } //check wether user exists with this email already try{ let user = await User.findOne({email: req.body.email}); if(user){ return res.status(400).json({error: 'sorry user with this email already exists'}) } const salt = await bcrypt.genSalt(10); const secPass = await bcrypt.hash(req.body.password, salt) user = await User.create({ name: req.body.name, email: req.body.email, password: req.body.password }) //this is for understanding purpose of other code // .then(user => res.json(user)) // .catch(err =>{console.log(err) // res.json({error: 'email already exists', message: err.message})}); res.json(user) } catch (error){ console.error(error.message); res.status(500).send('some error occured') } }) module.exports = routerEste es el archivo package.json:
{ "name": "my-app", "version": "1.0.0", "description": "project contains backend and front end", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start-nodemon": "nodemon ./index.js" }, "author": "yashrith", "license": "ISC", "dependencies": { "bcryptjs": "^2.4.3", "express": "^4.17.1", "express-validator": "^6.13.0", "mongoose": "^6.0.13" }, "devDependencies": { "nodemon": "^2.0.15" } }Estás codificando tu contraseña pero no la estás usando. Prueba con esto.
const express = require('express'); const router = express.Router(); const User = require('../models/User'); const { body, validationResult } = require('express-validator'); const bcrypt = require('bcryptjs'); router.post('/',[ body('name').isLength({ min: 3 }), body('email').isEmail(), body('password').isLength({ min: 5 }) ] ,async(req,res)=>{ //if there are any errors it sends bad request 400 const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } //check wether user exists with this email already try{ let user = await User.findOne({email: req.body.email}); if(user){ return res.status(400).json({error: 'sorry user with this email already exists'}) } const salt = await bcrypt.genSalt(10); const secPass = await bcrypt.hash(req.body.password, salt) user = await User.create({ name: req.body.name, email: req.body.email, password: secPass }) //this is for understanding purpose of other code // .then(user => res.json(user)) // .catch(err =>{console.log(err) // res.json({error: 'email already exists', message: err.message})}); res.json(user) } catch (error){ console.error(error.message); res.status(500).send('some error occured') } }) module.exports = router