Supabase Auth: "Invalid login credentials" Fehler beheben

7. August 2026 ca. 4 Min. Lesezeit Supabase
Inhalt 11

Login-Formular sieht korrekt aus, E-Mail und Passwort stimmen – und trotzdem antwortet Supabase Auth mit:

AuthApiError: Invalid login credentials

Oder im Network-Tab: 400 mit error_description: "Invalid login credentials". Hier sind die häufigsten Ursachen und die Fixes, die bei mir zuverlässig geholfen haben.

Das Problem: Was "Invalid login credentials" wirklich bedeutet

Supabase verrät aus Sicherheitsgründen nicht, ob E-Mail oder Passwort falsch ist. Die Meldung deckt deshalb mehrere Fälle ab:

  • Falsches Passwort oder Tippfehler in der E-Mail
  • User existiert (noch) nicht in diesem Projekt
  • E-Mail noch nicht bestätigt (Enable email confirmations)
  • Falsches Projekt / falsche Keys im Client
  • User über OAuth angelegt, Login aber per Password versucht

Die Lösung: Ursachen systematisch eingrenzen

Schritt 1: User im Dashboard prüfen

Unter Authentication → Users nach der E-Mail suchen:

  • Kein Eintrag → Sign-up ist fehlgeschlagen oder anderes Projekt
  • Eintrag ohne Bestätigung → Confirmation noch offen
  • Provider nur google/github → kein Passwort-Login möglich

Schritt 2: Sign-in korrekt aufrufen

const { data, error } = await supabase.auth.signInWithPassword({
  email: email.trim().toLowerCase(),
  password,
})

if (error) {
  console.error(error.message, error.status)
  // "Invalid login credentials" → siehe Checklist unten
}

Achte auf trim() und konsistente Groß-/Kleinschreibung der E-Mail beim Sign-up und Sign-in.

Schritt 3: E-Mail-Bestätigung

Wenn Confirmations aktiv sind und der User unbestätigt ist, kann der Login je nach Einstellung ebenfalls scheitern. Zum Debuggen kurz deaktivieren oder den User im Dashboard bestätigen:

-- Nur lokal/Dev: User manuell bestätigen
UPDATE auth.users
SET email_confirmed_at = now()
WHERE email = 'test@example.com';

Schritt 4: Projekt-Keys und URL prüfen

const supabase = createClient(
  process.env.NEXT_PUBLIC_SUPABASE_URL,
  process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY
)

Vertauschte Projekte (Staging vs. Produktion) sind ein Klassiker: Sign-up landet in Projekt A, Login geht gegen Projekt B.

Häufige Fehler

  • signUp statt signIn: Doppelter Sign-up mit gleicher E-Mail wirkt wie Login-Fehler.
  • Leerzeichen in Inputs: Mobile Autofill fügt oft Trailing Spaces ein.
  • Identity Linking: User hat sich mit Google registriert und versucht danach E-Mail/Passwort.
  • Custom SMTP / Redirect URLs: Bestätigungsmail kommt nicht an → Account bleibt unbestätigt.

Vollständiges Login-Beispiel mit klaren Fehlern

async function login(email, password) {
  const { data, error } = await supabase.auth.signInWithPassword({
    email: email.trim().toLowerCase(),
    password,
  })

  if (error) {
    if (error.message === 'Invalid login credentials') {
      return {
        ok: false,
        hint: 'E-Mail/Passwort prüfen, Bestätigung und Auth-Provider im Dashboard checken.',
      }
    }
    if (error.message.includes('Email not confirmed')) {
      return { ok: false, hint: 'Bitte E-Mail bestätigen oder im Dashboard freischalten.' }
    }
    return { ok: false, hint: error.message }
  }

  return { ok: true, session: data.session }
}

Troubleshooting Checklist

  1. ✅ User unter Authentication → Users vorhanden?
  2. email_confirmed_at gesetzt (falls Confirmations an)?
  3. ✅ Login-Methode passt zum Provider (Password vs. OAuth)?
  4. ✅ URL + anon key gehören zum gleichen Projekt wie der User?
  5. ✅ E-Mail getrimmt / Passwort ohne Autofill-Artefakte?

Fazit

Invalid login credentials ist Absicht vage. Mit Dashboard-Check, korrektem signInWithPassword, bestätigter E-Mail und den richtigen Projekt-Keys findest du die Ursache in wenigen Minuten.

Weitere Ressourcen

Kommt die Meldung trotz korrektem Passwort? Kommentar schreiben – oft ist es Confirmation oder der falsche Provider.

Kommentare