You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase数据库Phone Authentication写入权限被拒问题求助

解决Firebase电话认证后数据库权限被拒问题

看起来你已经成功完成了电话认证,但在写入数据库时遇到了权限问题——这其实是很常见的场景,我帮你一步步排查解决:

一、先排查核心问题:数据库实例是否正确关联认证状态

有时候虽然Auth已经拿到用户,但你的Firebase数据库实例可能没有正确获取到当前的认证会话。请确认你初始化数据库的方式是正确的,确保和Auth使用的是同一个Firebase项目;另外注意你代码里用的new Firebase()是旧版本SDK的写法,建议升级到最新的Firebase Realtime Database SDK,改用FirebaseDatabase.getInstance()来获取实例。

二、优化安全规则(更安全且精准)

你当前的全局规则虽然允许认证用户读写,但既不安全也容易出现匹配问题。建议改成用户只能读写自己的专属节点,这是Firebase数据库的安全最佳实践:

{
  "rules": {
    "Users": {
      "$uid": {
        ".write": "auth.uid === $uid",
        ".read": "auth.uid === $uid"
      }
    }
  }
}

这个规则的逻辑是:只有当认证用户的uid和Users下的节点$uid完全匹配时,才允许该用户进行读写操作,既限定了权限范围,也避免了全局权限的潜在风险。

三、修正你的写入代码

你当前的代码是写入到固定的/Users/user_id节点,这会导致所有用户都往同一个位置写数据,也和上面的规则不匹配。应该用用户自己的uid作为节点名称:

// 获取当前认证用户,先做非空判断
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // 初始化数据库引用(确保是正确的项目地址)
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference userRef = database.getReference("Users").child(user.getUid());
    
    // 写入用户信息,比如uid、手机号等
    userRef.child("uid").setValue(user.getUid());
    userRef.child("phoneNumber").setValue(user.getPhoneNumber());
}

四、确保在Auth状态稳定后执行写入操作

有时候即使你看到了signInWithCredential:success的日志,但Auth状态可能还没完全同步到数据库实例。建议把数据库写入放到Auth状态监听回调里,保证只有当认证状态明确稳定时才执行操作:

FirebaseAuth.getInstance().addAuthStateListener(new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        FirebaseUser user = firebaseAuth.getCurrentUser();
        if (user != null) {
            // 在这里执行数据库写入
            DatabaseReference userRef = FirebaseDatabase.getInstance().getReference("Users").child(user.getUid());
            userRef.child("uid").setValue(user.getUid());
        }
    }
});

最后验证步骤

  1. 在Firebase控制台保存更新后的安全规则
  2. 运行修改后的代码
  3. 检查Firebase控制台的Database面板,确认用户数据是否成功写入

如果还是有问题,可以用Firebase控制台的规则模拟器,模拟认证用户的写入操作,排查规则是否存在逻辑问题。

内容的提问来源于stack exchange,提问作者vivanred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:03:06