feat: согласие на cookies — блокировка входа и регистрации

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
shop
2026-05-17 11:32:08 +03:00
parent 14e0e875f1
commit bda73e1662
13 changed files with 222 additions and 4 deletions
+3
View File
@@ -3,11 +3,14 @@ const bcrypt = require('bcryptjs');
const { query, formatPrice } = require('../db');
const { getCart, cartCount } = require('../cart');
const { requireAuth } = require('../middleware/auth');
const { requireCookieConsent } = require('../middleware/cookieConsent');
const { ROLE_LABELS } = require('../constants/roles');
const { asyncHandler } = require('../utils/asyncHandler');
const router = express.Router();
router.use(requireCookieConsent);
router.use((req, res, next) => {
const cart = getCart(req);
res.locals.cartCount = cartCount(cart);
+5 -2
View File
@@ -3,6 +3,7 @@ const bcrypt = require('bcryptjs');
const { query, formatPrice } = require('../db');
const { getCart, cartCount } = require('../cart');
const { requireAuth } = require('../middleware/auth');
const { requireCookieConsent } = require('../middleware/cookieConsent');
const { ROLES } = require('../constants/roles');
const { asyncHandler } = require('../utils/asyncHandler');
@@ -15,13 +16,14 @@ router.use((req, res, next) => {
next();
});
router.get('/register', (req, res) => {
router.get('/register', requireCookieConsent, (req, res) => {
if (req.session.userId) return res.redirect('/account');
res.render('register', { title: 'Регистрация', error: null, values: {} });
});
router.post(
'/register',
requireCookieConsent,
asyncHandler(async (req, res) => {
const { name, email, password, password2 } = req.body;
const values = { name, email };
@@ -70,7 +72,7 @@ router.post(
})
);
router.get('/login', (req, res) => {
router.get('/login', requireCookieConsent, (req, res) => {
if (req.session.userId) return res.redirect('/account');
res.render('login', {
title: 'Вход',
@@ -82,6 +84,7 @@ router.get('/login', (req, res) => {
router.post(
'/login',
requireCookieConsent,
asyncHandler(async (req, res) => {
const { email, password } = req.body;
const next = req.body.next || '/';
+24
View File
@@ -0,0 +1,24 @@
const express = require('express');
const { setConsentCookie } = require('../middleware/cookieConsent');
const router = express.Router();
const isProduction = process.env.NODE_ENV === 'production';
router.get('/policy', (req, res) => {
res.render('cookies-policy', {
title: 'Политика cookies',
cookieConsent: res.locals.cookieConsent,
});
});
router.post('/accept', (req, res) => {
setConsentCookie(res, isProduction);
const returnTo = req.body.return_to || req.query.return_to || '/';
const safe =
typeof returnTo === 'string' && returnTo.startsWith('/') && !returnTo.startsWith('//')
? returnTo
: '/';
res.redirect(safe);
});
module.exports = router;
+5
View File
@@ -2,6 +2,7 @@ const express = require('express');
const { query, pool, formatPrice } = require('../db');
const { getCart, cartCount, cartItems, cartTotal } = require('../cart');
const { requireAuth } = require('../middleware/auth');
const { requireCookieConsent } = require('../middleware/cookieConsent');
const { asyncHandler } = require('../utils/asyncHandler');
const router = express.Router();
@@ -155,6 +156,7 @@ router.post('/cart/remove/:id', (req, res) => {
router.get(
'/checkout',
requireCookieConsent,
requireAuth,
asyncHandler(async (req, res) => {
const cart = getCart(req);
@@ -174,6 +176,7 @@ router.get(
router.post(
'/checkout',
requireCookieConsent,
requireAuth,
asyncHandler(async (req, res) => {
const cart = getCart(req);
@@ -249,6 +252,7 @@ router.post(
router.get(
'/orders',
requireCookieConsent,
requireAuth,
asyncHandler(async (req, res) => {
const { rows: orders } = await query(
@@ -264,6 +268,7 @@ router.get(
router.get(
'/orders/:id',
requireCookieConsent,
requireAuth,
asyncHandler(async (req, res) => {
const { rows } = await query(