Auth: Magic Link Login + Globe-Zugangssteuerung
- Magic Link Login (E-Mail + 6-stelliger Code) - JWT-basierte Session (24h) - Prueft: is_active=1 UND globe_access=1 - Akzeptiert auch Monitor-JWT-Tokens (Kompatibilitaet) - Globe-spezifisches E-Mail-Template (Dark Theme) - Alle Daten-APIs hinter Auth-Middleware - Login-Seite mit taktischem Design - Auto-Redirect bei fehlendem/abgelaufenem Token - Fetch-Wrapper injiziert Authorization Header automatisch
Dieser Commit ist enthalten in:
@@ -9,6 +9,23 @@
|
||||
<link rel="stylesheet" href="/static/css/globe.css">
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
// Auth-Check: Ohne Token zum Login
|
||||
if (!localStorage.getItem('globe_token')) { window.location.href = '/login'; }
|
||||
// Auth-Header fuer alle Fetch-Calls
|
||||
var _origFetch = window.fetch;
|
||||
window.fetch = function(url, opts) {
|
||||
opts = opts || {};
|
||||
if (typeof url === 'string' && url.startsWith('/api/') && !url.includes('/auth/')) {
|
||||
opts.headers = opts.headers || {};
|
||||
opts.headers['Authorization'] = 'Bearer ' + localStorage.getItem('globe_token');
|
||||
}
|
||||
return _origFetch(url, opts).then(function(r) {
|
||||
if (r.status === 401 || r.status === 403) { localStorage.removeItem('globe_token'); window.location.href = '/login'; }
|
||||
return r;
|
||||
});
|
||||
};
|
||||
</script>
|
||||
<!-- Header -->
|
||||
<header id="header">
|
||||
<div class="header-brand">
|
||||
@@ -30,13 +47,13 @@
|
||||
<h3 class="panel-title">LAYER</h3>
|
||||
<div class="panel-section">
|
||||
<label class="layer-toggle">
|
||||
<input type="checkbox" id="layer-flights">
|
||||
<input type="checkbox" id="layer-flights" checked>
|
||||
<span class="layer-dot dot-flights"></span>
|
||||
<span class="layer-name">Flugverkehr</span>
|
||||
<span class="layer-count" id="count-flights">-</span>
|
||||
</label>
|
||||
<label class="layer-toggle">
|
||||
<input type="checkbox" id="layer-ships">
|
||||
<input type="checkbox" id="layer-ships" checked>
|
||||
<span class="layer-dot dot-ships"></span>
|
||||
<span class="layer-name">Schiffsverkehr</span>
|
||||
<span class="layer-count" id="count-ships">-</span>
|
||||
@@ -57,7 +74,7 @@
|
||||
<div class="panel-divider"></div>
|
||||
<div class="panel-section">
|
||||
<label class="layer-toggle">
|
||||
<input type="checkbox" id="layer-daynight">
|
||||
<input type="checkbox" id="layer-daynight" checked>
|
||||
<span class="layer-dot dot-daynight"></span>
|
||||
<span class="layer-name">Tag/Nacht</span>
|
||||
</label>
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren