# Google OAuth: manuelle Restarbeiten

Stand: 2026-05-15

## 1. Google Cloud Console vorbereiten

1. In der Google Cloud Console das passende Projekt öffnen oder ein neues Projekt anlegen.
2. Unter `APIs & Services > OAuth consent screen` den Consent Screen konfigurieren.
3. App-Name, Support-E-Mail und Entwicklerkontakt eintragen.
4. Scopes reichen für diese App:
   - `profile`
   - `email`
5. Unter `APIs & Services > Credentials` einen OAuth-Client vom Typ `Web application` anlegen.
6. Als Authorized redirect URI eintragen:
   - Produktion: `https://stechuhr3.tsschulz.de/api/auth/google/callback`
   - Lokal, falls benötigt: `http://localhost:3010/api/auth/google/callback`
7. `Client ID` und `Client Secret` notieren.

## 2. Server-Environment setzen

Auf dem Server in der produktiven Environment-Datei folgende Werte setzen:

```env
GOOGLE_CLIENT_ID=<client-id-aus-google-console>
GOOGLE_CLIENT_SECRET=<client-secret-aus-google-console>
GOOGLE_CALLBACK_URL=https://stechuhr3.tsschulz.de/api/auth/google/callback
API_PUBLIC_URL=https://stechuhr3.tsschulz.de/api
FRONTEND_URL=https://stechuhr3.tsschulz.de
SESSION_SECRET=<langer-zufallswert>
JWT_SECRET=<bestehender-oder-langer-zufallswert>
```

Wichtig: `GOOGLE_CALLBACK_URL` muss exakt mit der Redirect URI in der Google Console übereinstimmen.

## 3. Backend deployen und neu starten

1. Code auf den Server bringen.
2. Backend neu starten, z. B. über das vorhandene Deploy-Skript oder PM2.
3. Log prüfen. Erwartet:

```text
✅ Google OAuth konfiguriert
```

Wenn stattdessen `Google OAuth nicht konfiguriert` erscheint, fehlen `GOOGLE_CLIENT_ID` oder `GOOGLE_CLIENT_SECRET` im laufenden Prozess.

## 4. Web-Frontend deployen

1. Frontend neu bauen.
2. Neue `dist`-Dateien deployen.
3. Browser-Cache bei Bedarf leeren.

## 5. Android-App neu bauen/installieren

1. Debug/APK oder Release/AAB neu bauen.
2. App neu installieren.
3. Prüfen, dass Android den Deep Link `timeclock://oauth-callback` öffnet.

## 6. Testfälle

1. Google-Account ohne vorhandene TimeClock-E-Mail:
   - `Mit Google anmelden`
   - Erwartung: neuer Account wird erstellt und eingeloggt.
2. Google-Account bereits verknüpft:
   - `Mit Google anmelden`
   - Erwartung: direkter Login.
3. Google-Account mit E-Mail eines bestehenden Passwort-Accounts:
   - `Mit Google anmelden`
   - Erwartung: Verknüpfungsabfrage.
   - Bestehende E-Mail + Passwort eingeben.
   - Erwartung: Account wird verknüpft und eingeloggt.
4. Eingeloggt unter `Persönliche Daten`:
   - `Mit Google-Konto verknüpfen`
   - Erwartung: Google Flow startet, danach Rückkehr und Verknüpfung.
5. Danach ausloggen und erneut `Mit Google anmelden`.
   - Erwartung: direkter Login in denselben bestehenden Account.

## 7. Falls etwas fehlschlägt

- Google meldet `redirect_uri_mismatch`: Redirect URI in Google Console und `GOOGLE_CALLBACK_URL` vergleichen.
- Backend zeigt OAuth nicht konfiguriert: PM2/Deploy lädt die neuen Env-Werte nicht. Prozess mit aktualisierter Environment neu starten.
- Android kehrt nicht in die App zurück: prüfen, ob der Browser auf `timeclock://oauth-callback?...` weiterleitet und die neu gebaute App installiert ist.
- Verknüpfung schlägt fehl: prüfen, ob der alte Account wirklich ein Passwort hat. OAuth-only Accounts können sich nicht per Passwort bestätigen.
