Как использовать recaptcha v3 в форме с проверкой значений в Express (NodeJS) - PullRequest
0 голосов
/ 15 мая 2019

Я использую NodeJS с Express для создания веб-сайта. Мне нужно создать форму для регистрации, и мне нужно защитить ее с помощью капчи. Я решил использовать «экспресс-recaptcha».

Я создал форму с некоторыми полями (имя, адрес электронной почты, пароль, проверка пароля, ...). Если некоторые значения не верны (уже использованный адрес электронной почты, неверный пароль, ...), я должен отобразить ту же форму с сообщением об ошибке.

Проблема: Если в моем методе post есть недопустимые значения, мне нужно отобразить форму, но я также должен отобразить мою recaptcha К сожалению, метод res.render не пройдет через recaptcha.middleware.render

router.get('/', recaptcha.middleware.render, (req, res) => {
    res.render('register', {isLogged: req.isAuthenticated(), captcha: res.recaptcha });
});

router.post('/', recaptcha.middleware.verify, [
    check('name', i18n.__('Invalid name')).isLength({ min: 4 }),
    check('email', i18n.__('Invalid email')).isEmail(),
    check('password', i18n.__('Invalid password'))
        .isLength({ min: 4 })
        .custom((value, { req }) => {
            if (value !== req.body.confirmPassword) {
                throw new Error(i18n.__("Password don't match"));
            } else {
                return value;
            }
        })
], (req, res, next) => {
    const errors = validationResult(req);

    if (req.recaptcha.error) {
        res.render('register', {
            title: i18n.__('Error during registration'),
            errors: errors.array(),
            data: req.body,
            captcha: req.recaptcha,
            recaptchaError: req.recaptcha.error,
            recaptchaData: JSON.stringify(req.recaptcha.data)
        });
        return
    }

    if (!errors.isEmpty()) {
        res.render('register', {
            title: i18n.__('Error during registration'),
            errors: errors.array(),
            data: req.body,
            captcha: req.recaptcha
        });
        return
    }

    ... create my user and other stuffs
});

Я не знаю, как отобразить мою регистрационную форму и "переслать" капчу. Если я отображаю свою страницу и отправляю req.recaptcha, я получаю сообщение об ошибке: недействительный-вход-ответ

...