feat: капча Google/Cloudflare, блокировка Яндекс SmartCaptcha

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
shop
2026-05-17 14:41:45 +03:00
parent f9f0446c12
commit 9025677fd8
11 changed files with 251 additions and 0 deletions
+20
View File
@@ -6,6 +6,7 @@ const { requireAuth } = require('../middleware/auth');
const { requireCookieConsent } = require('../middleware/cookieConsent');
const { ROLES } = require('../constants/roles');
const { asyncHandler } = require('../utils/asyncHandler');
const { verifyCaptcha } = require('../services/captcha');
const router = express.Router();
@@ -28,6 +29,15 @@ router.post(
const { name, email, password, password2 } = req.body;
const values = { name, email };
const captchaCheck = await verifyCaptcha(req);
if (!captchaCheck.ok) {
return res.status(400).render('register', {
title: 'Регистрация',
error: captchaCheck.error,
values,
});
}
if (!name?.trim() || !email?.trim() || !password) {
return res.status(400).render('register', {
title: 'Регистрация',
@@ -90,6 +100,16 @@ router.post(
const next = req.body.next || '/';
const values = { email };
const captchaCheck = await verifyCaptcha(req);
if (!captchaCheck.ok) {
return res.status(400).render('login', {
title: 'Вход',
error: captchaCheck.error,
next,
values,
});
}
const { rows } = await query('SELECT * FROM users WHERE email = $1', [
(email || '').trim().toLowerCase(),
]);
+11
View File
@@ -6,6 +6,7 @@ const { getCart, cartCount } = require('../cart');
const { formatPrice } = require('../db');
const { requireCookieConsent } = require('../middleware/cookieConsent');
const { asyncHandler } = require('../utils/asyncHandler');
const { verifyCaptcha } = require('../services/captcha');
const { sendPasswordResetEmail, siteUrl } = require('../services/mail');
const router = express.Router();
@@ -39,6 +40,16 @@ router.post(
const genericSuccess =
'Если аккаунт с таким email существует, мы отправили ссылку для сброса пароля.';
const captchaCheck = await verifyCaptcha(req);
if (!captchaCheck.ok) {
return res.status(400).render('auth/forgot-password', {
title: 'Сброс пароля',
error: captchaCheck.error,
success: null,
values,
});
}
if (!email) {
return res.status(400).render('auth/forgot-password', {
title: 'Сброс пароля',