Desafortunadamente, ¿el resultado de la función de comparación siempre es falso? Incluso cuando se publican datos correctos. ¿Crees que puede tener algo que ver con la función de comparación de bcrypt?
hash de registro y sal de la contraseña
module.exports.signupPost = async (req, res) => { const { email, password } = req.body; //create a user with hashed password try { const newUser = await User.create({ email, password }); newUser.password = await bcrypt.hash(newUser.password, 12); newUser.save(); res.status(200).json({ user: newUser._id }); } catch (err) { errors = handlerErr(err); res.status(400).json({ errors }); } };iniciar sesión comparar la contraseña con la contraseña hash
module.exports.loginPost = async (req, res) => { const { email, password } = req.body; try { const user = await User.findOne({ email }); if (!user) { res.status(404).json({ email: "No user found" }); } //if user exist check password is a match const user = await User.findOne({ email }); if (!user) { return res.status(404).json({ email: "No user found" }); } try { const match = await bcrypt.compare( password.toString(), user.password, function (err, res) { console.log(res);// returns false } ); } catch (err) {} }; user schemaesquema de usuario de la base de datos
const userSchema = new mongoose.Schema({ email: { type: String, required: [true, "Please enter a email"], unique: true, lowercase: true, }, password: { type: String, required: [true, "Please enter a password"], lowercase: true, }, });Eliminar lowercase: true del esquema de contraseña.
Estás convirtiendo la contraseña a minúsculas antes de codificarla y al guardar el hash.
Debe permitir el uso de mayúsculas en las contraseñas eliminando lowercase: true en su esquema de "contraseña" de mongoose. Esta configuración hace que todas las cadenas se transformen a minúsculas antes de almacenarse en la base de datos.
La implementación actual tiene 2 errores:
newUser , la contraseña de entrada se convierte a minúsculas en la base de datos que luego usa para generar el hash.De acuerdo con la documentación , debe verificar el resultado de esta manera:
bcrypt.compareSync(password, user.password); // result true or false const userSchema = new mongoose.Schema({ email: { type: String, required: [true, "Please enter a email"], unique: true, lowercase:true, }, password: { type: String, required: [true, "Please enter a password"], }, });