Express-validator, mongoose, mongoDB. Отобразить ошибку
Использую MongoDB, mongoose, Фреймворк Express, валидацию через express-validator. Проблема следующая: делаю валидацию на регистрацию и авторизацию пользователя на сайте. С регистрацией проблем не возникло. Сделал валидацию на корректный e-mail, занят e-mail в БД кем-то или просто некорректен. Проверку на поле с паролем и подтверждение пароля. Но с формой авторизации возникла проблема. Сделал проверку на наличие e-mail в базе данных либо на отсутствие. Как сделать проверку на корректность введенного пароля? Чтобы в БД находило пользователя с введенным e-mail, а после проверяло пароль. Если пароль введен неверный, то выбивало ошибку "введен неверный пароль". Мой код выглядит так:
const {body} = require('express-validator')
const User = require('../models/user')
exports.registerValidators = [
body('email')
.isEmail().withMessage('Введите корректный email')
.custom(async (value, req) => {
try {
const user = await User.findOne({ email: value })
if (user) {
return Promise.reject('Данный email уже занят')
}
} catch (e) {
console.log(e)
}
})
.normalizeEmail(),
body('password', 'Пароль должен быть минимум 6 символов')
.isLength({min: 6, max: 56})
.isAlphanumeric()
.trim(),
body('confirm')
.custom((value, {req}) => {
if (value !== req.body.password) {
throw new Error('Пароли должны совпадать')
}
return true
})
.trim(),
body('name')
.isLength({min: 3}).withMessage('Имя не может быть длиной менее 3 символов')
.trim()
],
exports.loginValidators = [
body('email')
.isEmail().withMessage('Введите корректный email')
.custom(async (value, req) => {
try {
const user = await User.findOne({ email: value })
if (!user) {
return Promise.reject('Данного пользователя не существует')
}
} catch (e) {
console.log(e)
}
})
.normalizeEmail(),
body('password', 'Пароль должен быть минимум 6 символов')
.isLength({min: 6, max: 56})
.isAlphanumeric()
.custom(async (value, valuePassword, req) => {
try {
const user = await User.findOne([{ email: value }, { password: valuePassword }])
if (user && valuePassword !== req.body.password) {
throw new Error('Введен неверный пароль')
}
} catch (e) {
console.log(e)
}
})
.trim(),
]
Работает все, кроме случая, когда вводится неверный пароль. Тогда происходит бесконечная переадресация, выбивает ошибку в консоль ObjectParameterError: Parameter "filter" to findOne() must be an object, got [object Object],[object Object]