fix: toggle as pure HTML form — no JS, no fetch, just POST+redirect
- views/index.ejs: onclick+fetch → form method=POST с button - ui/routes/auth.js: JSON → res.redirect(Referer) - Текст меняется: «Администратор» ↔ «Выйти из админки»
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ipwhitelist",
|
||||
"version": "0.5.48",
|
||||
"version": "0.5.49",
|
||||
"description": "IP WhiteList microservice for cloud provider",
|
||||
"main": "server.js",
|
||||
"scripts": {
|
||||
|
||||
+2
-1
@@ -176,7 +176,8 @@ function createRouter({ auth, MOCK_USERS, authLimiter }) {
|
||||
if (!canAdmin) return res.status(403).send('Forbidden');
|
||||
|
||||
req.session.adminMode = !req.session.adminMode;
|
||||
res.json({ ok: true, adminMode: req.session.adminMode });
|
||||
// Редирект туда же откуда пришли, или на главную
|
||||
res.redirect(req.get('Referer') || '/');
|
||||
});
|
||||
|
||||
// GET /logout
|
||||
|
||||
+7
-6
@@ -160,13 +160,14 @@
|
||||
<!-- Кнопки правой части header: admin-ссылки + чекбокс + выход -->
|
||||
<span style="margin-left:auto;display:flex;gap:.5rem;align-items:center;">
|
||||
<% if (typeof canAdminMode !== 'undefined' && canAdminMode) { %>
|
||||
<span id="admin-toggle" style="font-size:.8rem;color:var(--muted);display:flex;align-items:center;gap:.3rem;padding:.2rem .6rem;border:1px solid var(--border);border-radius:5px;background:#fff;cursor:pointer;user-select:none;"
|
||||
onclick="var bg=this.querySelector('.tg-bg'),kn=this.querySelector('.tg-knob');if(bg.style.background==='var(--blue)'||getComputedStyle(bg).background.includes('37,99,235')){bg.style.background='var(--border)';kn.style.left='2px';kn.style.right='auto'}else{bg.style.background='var(--blue)';kn.style.right='2px';kn.style.left='auto'};fetch('/toggle-admin',{method:'POST'}).then(r=>r.json()).then(d=>{if(d.ok)location.reload()})">
|
||||
<label style="cursor:pointer;">Администратор</label>
|
||||
<span class="tg-bg" style="position:relative;width:36px;height:20px;background:<%= adminMode ? 'var(--blue)' : 'var(--border)' %>;border-radius:10px;transition:background .2s;">
|
||||
<span class="tg-knob" style="position:absolute;top:2px;<%= adminMode ? 'right:2px;' : 'left:2px;' %>width:16px;height:16px;background:#fff;border-radius:50%;transition:all .2s;"></span>
|
||||
</span>
|
||||
<form method="POST" action="/toggle-admin" style="display:inline;">
|
||||
<button type="submit" style="font-size:.8rem;color:var(--muted);display:flex;align-items:center;gap:.3rem;padding:.2rem .6rem;border:1px solid var(--border);border-radius:5px;background:#fff;cursor:pointer;">
|
||||
<span style="font-weight:500;"><%= adminMode ? 'Выйти из админки' : 'Администратор' %></span>
|
||||
<span style="position:relative;width:36px;height:20px;background:<%= adminMode ? 'var(--blue)' : 'var(--border)' %>;border-radius:10px;transition:background .2s;">
|
||||
<span style="position:absolute;top:2px;<%= adminMode ? 'right:2px;' : 'left:2px;' %>width:16px;height:16px;background:#fff;border-radius:50%;transition:all .2s;"></span>
|
||||
</span>
|
||||
</button>
|
||||
</form>
|
||||
<% } %>
|
||||
<% if (typeof adminMode !== 'undefined' && adminMode) { %>
|
||||
<a href="/audit" style="font-size:.8rem;color:var(--muted);text-decoration:none;padding:.2rem .6rem;border:1px solid var(--border);border-radius:5px;background:#fff;">Аудит</a>
|
||||
|
||||
Reference in New Issue
Block a user