无法捕获Firebase Auth错误?如何打印错误信息与错误码?
Firebase Auth 错误无法捕获、控制台无输出问题解决
问题详情
希望在Firebase Auth登录出错时将错误信息打印到控制台,但控制台无任何输出,甚至没进入catch代码块。仅能在界面看到错误提示,无法获取错误信息和错误码做后续处理。
原始代码
if(remember){ setPersistence(auth, browserLocalPersistence) } setPersistence(auth, browserSessionPersistence) .then(() => { signInWithEmailAndPassword(auth, email, password); }) .catch((err:any) => { console.log(err.message + "error"); switch (err.code) { case "auth/Invalid-email": case "auth/user-disabled": case "auth/user-not-found": setError(err.message); break; case "auth/wrong-password": setError(err.message) break; default: } }); };
问题分析与修复
1. 异步Promise未正确链式调用
signInWithEmailAndPassword是异步函数,返回Promise,但你在then回调中仅调用该函数,未返回其Promise,导致它抛出的错误无法被外层catch捕获。
2. 持久化设置逻辑存在问题
当remember为true时,你调用了setPersistence(auth, browserLocalPersistence)但未处理其Promise,随后又立即调用setPersistence(auth, browserSessionPersistence),这会直接覆盖之前的持久化设置,且第一个setPersistence的错误也无法被捕获。
3. Firebase错误码格式错误
Firebase Auth的错误码全部为小写连字符格式,比如auth/invalid-email,你代码中写的auth/Invalid-email无法匹配到对应错误类型。
修复后的代码
// 先确定要使用的持久化策略 const persistenceType = remember ? browserLocalPersistence : browserSessionPersistence; setPersistence(auth, persistenceType) .then(() => { // 返回signInWithEmailAndPassword的Promise,让错误能被外层catch捕获 return signInWithEmailAndPassword(auth, email, password); }) .catch((err: any) => { console.log(err.message + " error"); switch (err.code) { case "auth/invalid-email": case "auth/user-disabled": case "auth/user-not-found": case "auth/wrong-password": setError(err.message); break; default: console.log("未知错误码:", err.code); setError("登录失败,请稍后重试"); } });
额外调试建议
- 打开浏览器控制台的Verbose日志级别,Firebase Auth会输出详细的调试日志,帮助快速定位问题。
- 确保使用最新版本的Firebase Auth SDK,避免旧版本的已知bug。
内容的提问来源于stack exchange,提问作者Klaudia K
相关产品推荐
相关产品推荐

