Zum Inhalt springen

Google OAuth einrichten

Google-Login ermöglicht Content-Redakteuren den Zugang zum Admin — ohne eigenen GitHub-Account. Commits laufen weiterhin über den zentralen GITHUB_TOKEN.

Zwei Rollen, ein Admin

  • GitHub-Login → Admin (voller Zugriff, alle Seiten)
  • Google-Login → Redakteur (optional auf bestimmte Seiten eingeschränkt)
  • Alle Commits gehen über GITHUB_TOKEN — Google-User brauchen keinen GitHub-Account

1. OAuth-App in der GCP Console anlegen

GCP Console – Schritt für Schritt
1. console.cloud.google.com aufrufen
2. Neues Projekt erstellen (oder bestehendes wählen)
3. APIs & Dienste → OAuth-Zustimmungsbildschirm
   - Nutzertyp: Extern
   - App-Name, E-Mail-Adresse ausfüllen
   - Scopes: email, profile, openid hinzufügen
   - Test-Nutzer: deine E-Mail eintragen (solange App nicht verifiziert)
4. APIs & Dienste → Anmeldedaten → + Anmeldedaten erstellen → OAuth-Client-ID
   - Anwendungstyp: Webanwendung
   - Name: Setzkasten CMS
   - Autorisierte Weiterleitungs-URIs: → siehe unten
App-Verifizierung: Solange die App nicht von Google verifiziert ist, können nur eingetragene Test-Nutzer sich einloggen. Für interne Tools ist das ausreichend — eine Verifizierung ist nicht nötig.

2. Callback-URL eintragen

In den OAuth-Client-Einstellungen unter Autorisierte Weiterleitungs-URIs:

Autorisierte Weiterleitungs-URIs
# Produktion
https://deine-seite.de/api/setzkasten/auth/callback

# Lokale Entwicklung (separate Client-ID empfohlen)
http://localhost:4321/api/setzkasten/auth/callback
Wichtig: Produktion und lokale Entwicklung benötigen separate Einträge (oder separate OAuth-Client-IDs). Die URL muss exakt übereinstimmen — kein Trailing-Slash, kein falsches Protokoll.

3. Credentials als Env-Variablen setzen

Client-ID und Secret aus der GCP Console kopieren und als Umgebungsvariablen eintragen:

.env
# .env (lokal) / Environment Variables (Vercel/Netlify/Cloudflare)
GOOGLE_CLIENT_ID=1234567890-abc123.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxxxx

Vercel

Project → Settings → Environment Variables

Netlify

Site → Environment variables

Cloudflare

Pages → Settings → Environment variables

4. Setzkasten-Integration konfigurieren

Google neben GitHub in der Astro-Config aktivieren:

astro.config.mjs
// astro.config.mjs
import setzkasten from '@setzkasten-cms/astro'

export default defineConfig({
  integrations: [
    setzkasten({
      // GitHub bleibt für den Admin-Login
      github: {
        clientId: process.env.GITHUB_CLIENT_ID,
        clientSecret: process.env.GITHUB_CLIENT_SECRET,
      },
      // Google für Content-Redakteure
      google: {
        clientId: process.env.GOOGLE_CLIENT_ID,
        clientSecret: process.env.GOOGLE_CLIENT_SECRET,
      },
      // Wer sich einloggen darf (gilt für beide Provider)
      allowedEmails: ['admin@example.com'],
      storage: { /* ... */ },
    }),
  ],
})

5. Redakteure freischalten

Google-User müssen explizit freigeschaltet werden — entweder über die Admin-UI oder in der statischen Config:

Option A: Admin-UI

Als GitHub-Admin einloggen → Dashboard → Redakteure verwalten → E-Mail hinzufügen und optional Seiten einschränken. Änderungen sind sofort wirksam, kein Redeploy nötig.

Option B: Config-Datei

Statisch in setzkasten.config.ts definieren — sinnvoll wenn die Redakteursliste stabil ist oder per Git verwaltet werden soll.

setzkasten.config.ts
// setzkasten.config.ts — Seiten-Einschränkungen pro Redakteur
export default defineConfig({
  auth: {
    providers: ['github', 'google'],
    editors: [
      // Darf alle Seiten bearbeiten
      { email: 'redakteur@example.com' },
      // Nur bestimmte Seiten
      { email: 'blog-autor@example.com', pages: ['blog', 'news'] },
    ],
  },
  // ...
})

Häufige Fehler

redirect_uri_mismatch

Ursache: Callback-URL in der GCP Console stimmt nicht exakt mit der Produktions-URL überein.

Fix: URL in den OAuth-Client-Einstellungen prüfen — Protokoll, Domain und Pfad müssen identisch sein.

access_denied

Ursache: Die E-Mail ist weder in allowedEmails noch in _editors.json eingetragen.

Fix: E-Mail als Test-Nutzer in der GCP Console eintragen UND in der Admin-UI oder Config freischalten.

App nicht verifiziert (Warnung)

Ursache: Google zeigt eine Warnung, weil die OAuth-App noch nicht verifiziert ist.

Fix: Für interne Tools: "Erweitert → Zu [App] gehen" klicken. Oder App in der GCP Console verifizieren.

invalid_client

Ursache: GOOGLE_CLIENT_ID oder GOOGLE_CLIENT_SECRET fehlt oder ist falsch.

Fix: Env-Variablen auf dem Hosting-Provider prüfen. Nach Änderung Redeploy nötig.