He usado este código para comparar.
UserSchema.pre('save', async function() { const salt = await bcrypt.genSalt(10) this.password = await bcrypt.hash(this.password, salt) }) UserSchema.methods.comparePassword = async function(candidatePassword) { const isMatch = await bcrypt.compare(candidatePassword, this.password) console.log(this.password); console.log(candidatePassword); return isMatch }Siempre recibo un error de credenciales no válidas de la siguiente función de inicio de sesión. Lo he comprobado registrando las salidas. El problema radica en la función de comparación de contraseñas.
const login = async(req, res) => { const { email, password } = req.body if (!email || !password) { throw new CustomError.BadRequestError('Please provide email and password') } const user = await User.findOne({ email }) if (!user) { throw new CustomError.UnauthenticatedError('Invalid Credentials') } const isPasswordCorrect = await user.comparePassword(password) if (!isPasswordCorrect) { throw new CustomError.UnauthenticatedError('Invalid Credentials') } if (!user.isVerified) { throw new CustomError.UnauthenticatedError('Please Verify Your Email ') } const tokenUSer = createTokenUser(user) attachCookiesToResponse({ res, user: tokenUSer }) res.status(StatusCodes.OK).json({ user: tokenUSer }) }