React + Firebase已启用登录提供程序却提示“禁用”的问题求助
这种情况真的挺挠头的——明明控制台开了开关,代码却报错,还好数据库能通信,说明基础连接没问题,咱们一步步排查:
先仔细核对控制台的项目和设置
别笑,我自己都犯过这种低级错误:开了好几个Firebase控制台标签,不小心在旧项目里改了设置,当前开发用的项目其实根本没开对应开关。确认这几点:- 控制台右上角显示的项目名称是不是你开发用的那个
- 进入Authentication -> Sign-in Method,确保Email/Password的主开关是「Enabled」(下面的「Email link (passwordless sign-in)」不影响普通密码登录,不用管它)
- 顺便看看「Authorized domains」里有没有你本地开发的域名(比如
localhost:3000),虽然数据库能通信,但Auth服务可能单独做了域名限制
核对代码里的Firebase配置
去控制台的「Project Settings」->「Your apps」,找到你创建的Web应用,复制最新的配置对象,和代码里firebase.initializeApp()里的参数逐一对比——重点看authDomain、apiKey这两个字段,很多时候是复制错了旧项目的配置,导致Auth请求发到了错误的项目上。清缓存+重启开发服务
本地开发环境经常会缓存旧的配置数据,试试这两步:- 关掉你的开发服务器(比如
npm start的进程),完全重启一次 - 清除浏览器的LocalStorage和SessionStorage,或者直接用隐私窗口测试登录功能
- 关掉你的开发服务器(比如
检查登录代码的调用方式
确认你用的是正确的Email密码登录方法,别不小心调用了其他登录提供商的接口。比如代码应该是这样的:import { getAuth, signInWithEmailAndPassword } from "firebase/auth"; const handleLogin = async (email, password) => { const auth = getAuth(); try { const userCredential = await signInWithEmailAndPassword(auth, email, password); // 登录成功后的业务逻辑 } catch (error) { console.error(error.message); } };别把
signInWithEmailAndPassword写成signInWithPopup或者其他非密码登录的方法了。更新Firebase依赖包
旧版本的firebase npm包可能和控制台的新配置不兼容,试试更新到最新版:npm install firebase@latest最后排查项目状态
虽然数据库能通信,但还是确认一下项目有没有欠费或者被暂停:去控制台的「Billing」页面看看计费状态,有没有未支付的账单导致Auth服务受限。
如果这些步骤都试了还是不行,你可以把代码里的Firebase初始化部分和控制台设置的截图(打码敏感信息)贴出来,方便进一步排查。
内容的提问来源于stack exchange,提问作者ColorCutClarity

