feat: User-Management mit Token-basierter Authentifizierung
Backend: - UserRecord Model + Users-Tabelle in DB - AuthService: SHA256-Passwort-Hashing, Token-Verwaltung (ConcurrentDictionary) - AuthMiddleware: Schützt alle /api/-Routes (außer /api/auth/login) - AuthEndpoint: Login, Logout, Me - Default-User admin/admin wird automatisch erstellt Frontend: - Login-Page mit Formular (Enter-Key-Support) - Globaler Fetch-Interceptor: 401 → automatisch Login-Redirect - Auth-Check beim App-Start und bei Hash-Änderungen - Logout-Link im Dashboard-Header - Login-CSS: Zentrierte Login-Box
This commit is contained in:
1 parent
a1c54bf376
commit
9a59ae686d
13 files changed
+446
-3
No files matched your search
+17
-1
@@ -1,12 +1,28 @@
|
||||
// ── App Init ──
|
||||
|
||||
document.addEventListener('DOMContentLoaded', async () => {
|
||||
// Auth-Check: Eingeloggt?
|
||||
var user = await apiMe();
|
||||
if (!user) {
|
||||
await navigateTo('login');
|
||||
return;
|
||||
}
|
||||
|
||||
const { page, id } = parseHash();
|
||||
await navigateTo(page, { id });
|
||||
var target = page === 'login' ? 'dashboard' : page;
|
||||
await navigateTo(target, { id });
|
||||
});
|
||||
|
||||
// Hash-Änderungen abfangen
|
||||
window.addEventListener('hashchange', async () => {
|
||||
const { page, id } = parseHash();
|
||||
// Login-Seite immer erlauben, alles andere nur wenn eingeloggt
|
||||
if (page !== 'login') {
|
||||
var user = await apiMe();
|
||||
if (!user) {
|
||||
await navigateTo('login');
|
||||
return;
|
||||
}
|
||||
}
|
||||
await navigateTo(page, { id });
|
||||
});
|
||||
Reference in new issue
Block a user