Я использую 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, я получаю сообщение об ошибке:
недействительный-вход-ответ