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]


Ответы (0 шт):