0Pricing
React Academy · Lektion

Geschützte Routes und Auth-Guards

Leiten Sie nicht authentifizierte Benutzer mit Wrapper-Components oder Loader-basierten Guards zur Anmeldung weiter.

Geschützte Routes und Auth-Guards ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des React Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum sollten Sie Routen schützen?

Einige Seiten (Dashboard, Profil, Administration) sollten nur für authentifizierte Benutzer zugänglich sein. React Router bietet dafür zwei Ansätze: Wrapper-Komponenten und Loader-basierte Guards.

Struktur des Auth-Status

Legen Sie zunächst einen Auth-Kontext an, den Komponenten auslesen können, um festzustellen, ob der Benutzer angemeldet ist.

const AuthContext = React.createContext(null);

function AuthProvider({ children }) {
  const [user, setUser] = useState(null);
  const login = async (creds) => { const u = await apiLogin(creds); setUser(u); };
  const logout = () => setUser(null);
  return (
    <AuthContext.Provider value={{ user, login, logout }}>
      {children}
    </AuthContext.Provider>
  );
}

export const useAuth = () => useContext(AuthContext);

Guard mit Wrapper-Komponente

Erstellen Sie eine PrivateRoute-Komponente, die die Authentifizierung prüft und zur Anmeldung weiterleitet, wenn der Benutzer nicht authentifiziert ist.

import { Navigate, Outlet } from 'react-router-dom';

function PrivateRoute() {
  const { user } = useAuth();
  if (!user) return <Navigate to="/login" replace />;
  return <Outlet />;
}

// Usage in router:
{ element: <PrivateRoute />, children: [
  { path: '/dashboard', element: <Dashboard /> },
]}

Die Weiterleitungs-URL beibehalten

Speichern Sie die aufgerufene URL, damit Sie den Benutzer nach der Anmeldung dorthin zurückleiten können. Übergeben Sie sie über state an die Navigate-Komponente.

function PrivateRoute() {
  const { user } = useAuth();
  const location = useLocation();
  if (!user) {
    return <Navigate to="/login" state={{ from: location }} replace />;
  }
  return <Outlet />;
}

// In login handler:
const location = useLocation();
const from = location.state?.from?.pathname || '/';
navigate(from, { replace: true });

Loader-basierter Guard (Data Router)

Fügen Sie in der Data Router API eine Authentifizierungsprüfung zum loader der Route hinzu. Werfen Sie eine Weiterleitung, wenn der Benutzer nicht authentifiziert ist.

import { redirect } from 'react-router-dom';

function requireAuth() {
  const token = localStorage.getItem('token');
  if (!token) throw redirect('/login');
  return token;
}

const router = createBrowserRouter([
  {
    path: '/dashboard',
    loader: requireAuth,
    element: <Dashboard />,
  },
]);

Rollenbasierte Guards

Erweitern Sie den Guard um eine Rollenprüfung. Leiten Sie den Benutzer auf eine Seite für nicht autorisierte Zugriffe weiter, wenn ihm die erforderliche Rolle fehlt.

function AdminRoute() {
  const { user } = useAuth();
  if (!user) return <Navigate to="/login" replace />;
  if (user.role !== 'admin') return <Navigate to="/unauthorized" replace />;
  return <Outlet />;
}

Ladezustand während der Authentifizierungsprüfung

Wenn der Authentifizierungsstatus asynchron geladen wird (z. B. von einem Server), zeigen Sie während der ausstehenden Prüfung einen Ladeindikator an, um ein kurzzeitiges Anzeigen der Anmeldeseite zu vermeiden.

function PrivateRoute() {
  const { user, isLoading } = useAuth();
  if (isLoading) return <Spinner />;
  if (!user) return <Navigate to="/login" replace />;
  return <Outlet />;
}

Mehrere Routen gleichzeitig schützen

Gruppieren Sie alle geschützten Routen unter einem einzigen PrivateRoute-Wrapper, damit Sie den Guard nicht für jede Route einzeln wiederholen müssen.

const router = createBrowserRouter([
  { path: '/login', element: <Login /> },
  {
    element: <PrivateRoute />,
    children: [
      { path: '/dashboard', element: <Dashboard /> },
      { path: '/profile', element: <Profile /> },
      { path: '/settings', element: <Settings /> },
    ],
  },
]);

Ablauf von Tokens behandeln

Prüfen Sie den Ablauf des Tokens im Guard oder in einem globalen Interceptor. Melden Sie den Benutzer ab, wenn das Token abläuft, und leiten Sie ihn zur Anmeldung weiter.

function isTokenValid(token) {
  const payload = JSON.parse(atob(token.split('.')[1]));
  return payload.exp * 1000 > Date.now();
}

function requireAuth() {
  const token = localStorage.getItem('token');
  if (!token || !isTokenValid(token)) throw redirect('/login');
  return token;
}

Ablauf zur Token-Erneuerung

Versuchen Sie vor einer Weiterleitung nach einem 401-Fehler, das Token zu erneuern. Leiten Sie nur dann zur Anmeldung weiter, wenn auch die Erneuerung fehlschlägt.

async function requireAuth() {
  let token = localStorage.getItem('token');
  if (!token || isExpired(token)) {
    token = await refreshToken();
    if (!token) throw redirect('/login');
    localStorage.setItem('token', token);
  }
  return token;
}

Auth-Status über Neuladungen hinweg beibehalten

Speichern Sie das Auth-Token in localStorage oder einem HttpOnly-Cookie. Stellen Sie beim Laden der App den Auth-Status wieder her, bevor Sie geschützte Routen rendern.

Schnelltest

Was sollten Sie bei einem Loader-basierten Auth-Guard in React Router werfen, um einen nicht authentifizierten Benutzer weiterzuleiten?

Zusammenfassung

Schützen Sie Routen mit einem PrivateRoute-Wrapper, der <Outlet /> verwendet, oder mit einem Loader, der redirect() wirft. Bewahren Sie die ursprünglich aufgerufene URL im Navigationsstatus, behandeln Sie Ladezustände, um ein kurzzeitiges Anzeigen falscher Inhalte zu vermeiden, und gruppieren Sie geschützte Routen, um Duplikate zu vermeiden.

Häufig gestellte Fragen

Ist die Lektion „Geschützte Routes und Auth-Guards“ kostenlos?

Ja — der vollständige Text von „Geschützte Routes und Auth-Guards“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des React Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Geschützte Routes und Auth-Guards“?

Leiten Sie nicht authentifizierte Benutzer mit Wrapper-Components oder Loader-basierten Guards zur Anmeldung weiter. Du übst React Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um React Academy zu starten?

Keine Vorkenntnisse erforderlich. React Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Geschützte Routes und Auth-Guards“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser React Academy-Lektion Code schreiben und ausführen?

Ja. Jede React Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Verschachtelte Routes und Outlet-Layouts
  2. Loader und Actions (Data Router API)
  3. Geschützte Routes und Auth-Guards
  4. State in URL-Suchparametern verwalten
← Zurück zu React Academy