import React, { useState, useEffect, useRef } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '../context/AuthContext'; import { toast } from 'react-toastify'; const LoginPage = () => { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [showPassword, setShowPassword] = useState(false); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [showForgotModal, setShowForgotModal] = useState(false); const { login, loginWithToken } = useAuth(); const navigate = useNavigate(); const errRef = useRef(null); // Handle OAuth2 callback useEffect(() => { const params = new URLSearchParams(window.location.search); const token = params.get('token'); const userParam = params.get('user'); const err = params.get('error'); if (err) { const messages = { auth_failed: 'Microsoft-Anmeldung fehlgeschlagen.', account_inactive: 'Ihr Konto ist deaktiviert. Bitte kontaktieren Sie den Administrator.', azure_not_configured: 'Microsoft-Login ist nicht konfiguriert.', token_failed: 'Token-Austausch fehlgeschlagen.', internal_error: 'Interner Fehler beim Microsoft-Login.', }; setError(messages[err] || 'Anmeldung fehlgeschlagen.'); window.history.replaceState({}, '', '/login'); return; } if (token && userParam) { try { const user = JSON.parse(decodeURIComponent(userParam)); loginWithToken(token, user); window.history.replaceState({}, '', '/'); toast.success(`Willkommen, ${user.first_name || user.username}!`); navigate(user.must_change_password ? '/change-password' : '/dashboard'); } catch { setError('Fehler bei der Microsoft-Anmeldung.'); window.history.replaceState({}, '', '/login'); } } }, []); const handleSubmit = async (e) => { e.preventDefault(); setError(''); if (!username || !password) { setError('Bitte Benutzername und Passwort eingeben.'); return; } setLoading(true); try { const data = await login(username, password); navigate(data.user.must_change_password ? '/change-password' : '/dashboard'); toast.success('Erfolgreich angemeldet!'); } catch (err) { setError(err.message || 'Login fehlgeschlagen. Bitte überprüfen Sie Ihre Zugangsdaten.'); } finally { setLoading(false); } }; return (
Bitte wenden Sie sich an Ihren Administrator, um Ihr Passwort zurückzusetzen.
Aus Sicherheitsgründen können Passwörter nur von Administratoren zurückgesetzt werden.