feat: Admin-Login, Token-Handling und Passwort-Hashing optimiert
- Passwort-Hashing und Salt-Erzeugung mit bcrypt implementiert, um sensible Daten wie Passwörter sicher zu speichern. - Token-Generierung und -Validierung eingeführt, um den Admin-Status zu überprüfen und temporäre Zugriffsrechte zu verwalten. - Benutzername-Vergleich case-insensitive gestaltet, um Benutzerfreundlichkeit zu verbessern. - Token wird in localStorage gespeichert und die Ablaufzeit überprüft, um Sicherheit und konsistente Sitzungen zu gewährleisten. - Fehlerbehebungen und Code-Refactor durchgeführt, um Lesbarkeit und Wartbarkeit zu verbessern. **Warum:** - Passwort-Hashing und Salt schützen Passwörter vor direkten Angriffen (z. B. Brute-Force oder Datenlecks). - Token-Handling ermöglicht eine sichere und flexible Verwaltung von Sitzungsinformationen. - Verbesserungen erhöhen die Sicherheit und Benutzerfreundlichkeit des Admin-Bereichs.
This commit is contained in:
@@ -5,6 +5,7 @@ import { useRouter } from "next/router";
|
|||||||
import "bootstrap-icons/font/bootstrap-icons.css";
|
import "bootstrap-icons/font/bootstrap-icons.css";
|
||||||
import SettingsModal from "./modales/settingsModal/SettingsModal";
|
import SettingsModal from "./modales/settingsModal/SettingsModal";
|
||||||
import { useSelector } from "react-redux";
|
import { useSelector } from "react-redux";
|
||||||
|
import decodeToken from "../utils/decodeToken";
|
||||||
|
|
||||||
function Header() {
|
function Header() {
|
||||||
const isAdminLoggedIn = useSelector((state) => state.auth.isAdminLoggedIn);
|
const isAdminLoggedIn = useSelector((state) => state.auth.isAdminLoggedIn);
|
||||||
|
|||||||
@@ -8,17 +8,7 @@ import handleSave from "./handlers/handleSave";
|
|||||||
import handleDisplayEinschalten from "./handlers/handleDisplayEinschalten";
|
import handleDisplayEinschalten from "./handlers/handleDisplayEinschalten";
|
||||||
import handleChange from "./handlers/handleChange";
|
import handleChange from "./handlers/handleChange";
|
||||||
import firmwareUpdate from "./handlers/firmwareUpdate";
|
import firmwareUpdate from "./handlers/firmwareUpdate";
|
||||||
|
import decodeToken from "../../../utils/decodeToken";
|
||||||
function decodeToken(token) {
|
|
||||||
try {
|
|
||||||
const base64Payload = token.split(".")[1];
|
|
||||||
const payload = JSON.parse(atob(base64Payload));
|
|
||||||
return payload;
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Fehler beim Dekodieren des Tokens:", error);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function KueModal({ showModal, onClose, slot, onModulNameChange }) {
|
function KueModal({ showModal, onClose, slot, onModulNameChange }) {
|
||||||
const isAdminLoggedIn = useSelector((state) => state.auth.isAdminLoggedIn);
|
const isAdminLoggedIn = useSelector((state) => state.auth.isAdminLoggedIn);
|
||||||
|
|||||||
12
utils/decodeToken.js
Normal file
12
utils/decodeToken.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
function decodeToken(token) {
|
||||||
|
try {
|
||||||
|
const base64Payload = token.split(".")[1];
|
||||||
|
const payload = JSON.parse(atob(base64Payload));
|
||||||
|
return payload;
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Fehler beim Dekodieren des Tokens:", error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default decodeToken;
|
||||||
Reference in New Issue
Block a user