Firebase signInWithEmailAndPassword方法.then无响应无报错问题求助
问题排查与解决方法
- 排查表单默认提交行为
绝大多数verifyPassword请求被取消、无回调触发的问题都源于表单提交的默认刷新行为。如果loginUser方法绑定在form标签的onSubmit事件,或是绑定在type为submit的按钮点击事件上,表单默认会触发页面刷新,还未执行完成的Firebase请求会直接被中断,自然不会触发.then或.catch回调。
解决方法:在触发登录的事件回调开头添加阻止默认行为逻辑:const handleSubmit = (e) => { e.preventDefault() loginUser(email, password) } - 核对Firebase SDK版本与写法匹配
你当前的代码是SDK 8的命名空间式写法,如果你项目中安装的是9.x及以上版本的Firebase SDK,混用写法会导致逻辑异常。
如果你使用的是SDK 9的模块化版本,可以将登录逻辑替换为对应写法:import { getAuth, signInWithEmailAndPassword } from "firebase/auth"; const auth = getAuth(); const loginUser = (email, password) => { signInWithEmailAndPassword(auth, email, password) .then((userCredential) => { console.log('user', userCredential) history.push('/admin') }) .catch((error) => { console.error(error.code, error.message) }); } - 排查组件提前卸载问题
如果登录触发后当前组件立刻被卸载,未完成的Promise回调会被静默丢弃。可以添加加载状态,登录过程中禁止重复点击,也避免组件被提前卸载。 - 排除环境拦截问题
可以先使用浏览器无痕模式测试,排除广告拦截、隐私防护类浏览器扩展拦截Firebase请求的可能,同时检查项目中是否有全局的请求拦截器主动取消了Firebase相关请求。 - 核对Firebase控制台配置
确认Firebase控制台的「身份验证-登录方式」中,邮箱/密码登录的provider已经处于启用状态,你测试用的账号已经完成注册且未被禁用。
内容的提问来源于stack exchange,提问作者fedjedmedjed
相关产品推荐
相关产品推荐

