feat: согласие на cookies — блокировка входа и регистрации
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
<%- include('partials/layout-start') %>
|
||||
|
||||
<article class="legal-page card">
|
||||
<h1>Политика использования cookies</h1>
|
||||
|
||||
<h2>Что такое cookies</h2>
|
||||
<p>Cookies — небольшие файлы, которые сайт сохраняет в браузере для корректной работы сервиса.</p>
|
||||
|
||||
<h2>Какие cookies мы используем</h2>
|
||||
<ul>
|
||||
<li><strong>cookie_consent</strong> — запоминает ваш выбор (принятие политики), срок до 1 года.</li>
|
||||
<li><strong>connect.sid</strong> — сессия: корзина, вход в аккаунт, безопасность. Удаляется после выхода или по истечении срока.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Без согласия</h2>
|
||||
<p>Вы можете просматривать каталог. Вход, регистрация и личный кабинет недоступны до нажатия «Принимаю».</p>
|
||||
|
||||
<h2>Управление</h2>
|
||||
<p>Вы можете удалить cookies в настройках браузера. После этого потребуется снова принять политику и войти в аккаунт.</p>
|
||||
|
||||
<p><a href="/">← На главную</a></p>
|
||||
</article>
|
||||
|
||||
<%- include('partials/layout-end') %>
|
||||
@@ -0,0 +1,15 @@
|
||||
<%- include('partials/layout-start', { returnTo: returnTo }) %>
|
||||
|
||||
<div class="cookies-required">
|
||||
<h1>Согласие на cookies</h1>
|
||||
<p>Для этой страницы (вход, регистрация, личный кабинет) необходимо принять использование cookies.</p>
|
||||
<p class="muted">Мы сохраняем только технические cookies для сессии и безопасности.</p>
|
||||
<form action="/cookies/accept" method="post" class="cookie-banner__actions" style="margin-top:1rem">
|
||||
<input type="hidden" name="return_to" value="<%= returnTo %>">
|
||||
<button type="submit" class="btn btn--primary btn--lg">Принимаю cookies</button>
|
||||
<a href="/" class="btn btn--ghost">На главную</a>
|
||||
</form>
|
||||
<p style="margin-top:1rem"><a href="/cookies/policy">Политика cookies</a></p>
|
||||
</div>
|
||||
|
||||
<%- include('partials/layout-end') %>
|
||||
@@ -0,0 +1,18 @@
|
||||
<% if (!cookieConsent) { %>
|
||||
<div class="cookie-banner" role="dialog" aria-labelledby="cookie-banner-title" aria-live="polite">
|
||||
<div class="cookie-banner__inner container">
|
||||
<div class="cookie-banner__text">
|
||||
<p id="cookie-banner-title"><strong>Мы используем cookies</strong></p>
|
||||
<p class="muted">
|
||||
Для входа, регистрации и личного кабинета нужны технические cookies (сессия).
|
||||
Продолжая без согласия, каталог доступен; авторизация и регистрация — нет.
|
||||
<a href="/cookies/policy">Подробнее</a>
|
||||
</p>
|
||||
</div>
|
||||
<form action="/cookies/accept" method="post" class="cookie-banner__actions">
|
||||
<input type="hidden" name="return_to" value="<%= typeof returnTo !== 'undefined' ? returnTo : '/' %>">
|
||||
<button type="submit" class="btn btn--primary">Принимаю</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
@@ -1,8 +1,9 @@
|
||||
</main>
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<p>© <%= new Date().getFullYear() %> Shop — локальный интернет-магазин на Node.js + SQLite</p>
|
||||
<p>© <%= new Date().getFullYear() %> Shop · <a href="/cookies/policy">Cookies</a></p>
|
||||
</div>
|
||||
</footer>
|
||||
<%- include('cookie-banner') %>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -30,9 +30,12 @@
|
||||
<form action="/logout" method="post" class="inline-form">
|
||||
<button type="submit" class="btn btn--ghost btn--sm">Выйти</button>
|
||||
</form>
|
||||
<% } else { %>
|
||||
<% } else if (cookieConsent) { %>
|
||||
<a href="/login" class="nav__link">Вход</a>
|
||||
<a href="/register" class="btn btn--primary btn--sm">Регистрация</a>
|
||||
<% } else { %>
|
||||
<span class="nav__link nav__link--disabled" title="Примите cookies">Вход</span>
|
||||
<span class="nav__link nav__link--disabled" title="Примите cookies">Регистрация</span>
|
||||
<% } %>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user