Die folgenden Angaben stammen aus der Dokumentation von Firebase vom 23. Oktober 2026. Prüf dort die aktuellen Limits. Für die Grundlagen, was Firebase sendet und wie du es testest, beginne mit Firebase Authentication-E-Mails testen.
Die E-Mail kommt nie an
Niemand hat sie angefordert. createUserWithEmailAndPassword legt das Konto an und sendet keine E-Mail. Dein Registrierungscode muss sendEmailVerification für den neuen Nutzer aufrufen. Tut er das nicht, bleibt das Konto unbestätigt und der Tester wartet vergeblich.
Zur Adresse gibt es kein Konto. Mit dem Schutz vor E-Mail-Enumeration, standardmäßig aktiv für Projekte ab dem 15. September 2023, sendet sendPasswordResetEmail nur, wenn die Adresse zu einem Konto gehört, und gibt sonst keinen Fehler zurück. Ein Reset-Test mit einer nie registrierten Adresse klappt in deiner App, aber es kommt nichts an. Erst registrieren, dann zurücksetzen.
Ein Tageslimit ist aufgebraucht. Im kostenlosen Spark-Tarif sendet Firebase pro Tag 5 Anmeldungen per E-Mail-Link, 150 Passwort-Resets und 1.000 Bestätigungs-E-Mails. Die passwortlose Anmeldung stoppt nach dem fünften Test des Tages. Aktiviere für Staging die Abrechnung (Blaze) oder teste die Anmeldung per E-Mail-Link sparsam.
Sie liegt im Spam. Standardmäßig kommen die E-Mails von der noreply@-Adresse firebaseapp.com deines Projekts, der manche Posteingänge misstrauen. Richte in den E-Mail-Vorlagen der Konsole deine eigene Domain ein. Eine Proxy Mail QA-Adresse empfängt sie in jedem Fall, so kannst du „nicht gesendet“ von „im Spam gelandet“ unterscheiden.
Du nutzt den Emulator. Der Auth-Emulator sendet keine E-Mails: Er gibt jeden Bestätigungs-, Reset- und Anmeldelink im Terminal aus, in dem er läuft, sowie im Logs-Tab der Emulator Suite, und stellt sie für Tests über einen REST-Endpunkt bereit. Teste vor dem Launch mit einem echten Staging-Projekt.
Registrierung schlägt fehl
auth/email-already-in-use: Zu der Adresse gibt es schon ein Konto. Der Enumerationsschutz verbirgt das nicht. Nutze für jeden Lauf eine neue Adresse.- Zu viele Registrierungen: Firebase erlaubt 100 neue Konten pro Stunde von einer IP-Adresse. Eine Testsuite auf einer einzigen CI-Maschine kann das überschreiten. In der Firebase-Konsole kannst du eine vorübergehende Erhöhung planen.
- Passwortregeln: Mit aktiver Passwortrichtlinie schlägt ein schwaches Passwort mit
auth/password-does-not-meet-requirementsfehl. Sorg dafür, dass dein Formular den Grund nennt. - Bot-Schutz: reCAPTCHA-Schutz oder App-Check-Durchsetzung bei Authentication kann automatisierte Browser abweisen. Gib deinen Testläufen für App Check ein Debug-Token.
Anmeldung schlägt mit auth/invalid-credential fehl
Mit Enumerationsschutz liefern ein falsches Passwort und eine unbekannte Adresse denselben Fehler (INVALID_LOGIN_CREDENTIALS, den das Web-SDK als auth/invalid-credential meldet). Tests, die auth/user-not-found oder auth/wrong-password erwarten, schlagen dann fehl, ebenso Apps, die für jeden Fall eine eigene Meldung zeigen. Prüf stattdessen auf den einen Fehler.
Der Link wurde geklickt, aber die App sagt immer noch „Bestätige deine E-Mail“
Das User-Objekt in deiner App behält den emailVerified-Wert, den es bei der Anmeldung hatte. Nachdem der Link in einem anderen Tab geklickt wurde, ruf user.reload() auf, und user.getIdToken(true), wenn deine Sicherheitsregeln oder dein Backend den Claim email_verified lesen. Bis dahin sehen App und Regeln weiterhin einen unbestätigten Nutzer.
Der Link funktioniert nicht
auth/invalid-action-codeoderauth/expired-action-code: Der Link wurde schon benutzt oder ist abgelaufen. Fordere eine neue E-Mail an und nutze die neueste.auth/unauthorized-continue-uri: Die Continue-URL aus deinem Code liegt nicht auf einer autorisierten Domain. Füge jede Umgebung unter Authentication, Settings, Authorized domains hinzu. Preview-Deployments bekommen neue Domains, also muss jede hinzugefügt werden, oder du nutzt eine feste Staging-Domain.- Er führt zu localhost: Die Continue-URL kommt aus deinem Code. Bau sie aus einer Umgebungseinstellung statt aus einem fest codierten
http://localhost. Mehr unter Warum E-Mails auf localhost verlinken.
Die Anmeldung per E-Mail-Link fragt erneut nach der E-Mail
Die Anmeldung per E-Mail-Link wird in dem Browser abgeschlossen, der den Link angefordert hat: Deine App speichert die Adresse dort (meist in localStorage) und liest sie beim Öffnen des Links wieder aus. Öffnest du den Link auf einem anderen Gerät oder Browser, empfiehlt Firebase selbst, die Adresse erneut abzufragen, um Session Fixation zu verhindern. Das ist so gewollt. Tester sollten den Link dort öffnen, wo sie angefangen haben. In einer mobilen App muss der Link außerdem die App öffnen, was seit der Abschaltung von Dynamic Links anders funktioniert: siehe Firebase-Anmeldung per E-Mail-Link für mobile Apps.
Alles in einem Durchgang prüfen
- Leg für jedes Szenario eine neue Proxy Mail QA-Adresse an: neuer Nutzer, Passwort-Reset (mit einer registrierten Adresse), Anmeldung per E-Mail-Link.
- Geh den Ablauf in deiner App durch. Der Link erscheint innerhalb von Sekunden in der Zeile der Adresse, oder gar nicht – dann wurde nichts gesendet.
- Sieh dir die Zeile an: Ein Link auf localhost wird markiert, und der Posteingang zeigt Absender und Prüfungen jeder E-Mail.
checkEmailmitexpectHostlässt einen Test fehlschlagen, dessen Link nicht auf deine Website führt. - Öffne den Link im selben Browser und prüf dann, ob deine App den Nutzer als bestätigt zeigt, ohne Ab- und Wiederanmeldung.
Mit Antigravity oder einem anderen KI-Tool gebaut? Probleme bei Registrierung und Login in Vibe-Coded-Apps behandelt, was generierte Apps darüber hinaus oft falsch machen.