使用Expo+Firebase Auth实现邮箱注册时遇两类错误求助
解决Firebase+Expo邮箱注册的两类错误
错误1:IndexedDB读取报错 (0 , _idb.openDB) is not a function
原因
Expo环境对Firebase默认的IndexedDB持久化支持存在兼容性问题,或是Firebase版本与Expo SDK版本不匹配,导致idb模块无法正常加载。
解决方案
- 禁用IndexedDB持久化,改用会话持久化:在Firebase初始化后调整持久化配置
import { getAuth, setPersistence, browserSessionPersistence } from "firebase/auth"; const auth = getAuth(); // 替换默认持久化方式 setPersistence(auth, browserSessionPersistence) .then(() => { // 后续认证操作写在此处 }) .catch((error) => { console.error("设置持久化失败:", error); });
- 匹配Firebase与Expo版本:若使用Firebase v9+,确保Expo SDK版本在48.0.0及以上;版本不兼容时可降级Firebase到适配版本:
npm install firebase@9.23.0 # 或 yarn add firebase@9.23.0
- 补充安装idb依赖:若为缺失依赖导致,手动安装idb包:
npm install idb # 或 yarn add idb
错误2:auth参数类型不匹配 Argument of type '{ auth: Auth; app: FirebaseApp; }' is not assignable to parameter of type 'Auth'
原因
调用Firebase认证方法(如createUserWithEmailAndPassword)时,错误传递了包含auth和app的对象,而方法要求直接传入Auth实例。
解决方案
检查注册代码,确保直接传入Auth实例:
错误示例:
// 错误:传递了包含auth的对象 createUserWithEmailAndPassword({ auth: authInstance, app: firebaseApp }, email, password)
正确示例:
import { getAuth, createUserWithEmailAndPassword } from "firebase/auth"; const auth = getAuth(firebaseApp); // 获取Auth实例 // 直接传入auth实例 createUserWithEmailAndPassword(auth, email, password) .then((userCredential) => { // 处理注册成功逻辑 }) .catch((error) => { console.error("注册失败:", error); });
内容的提问来源于stack exchange,提问作者AXEL legendry
相关产品推荐
相关产品推荐

