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

Firestore权限缺失/不足问题排查(Firebase REST API+Python)

问题:Firestore规则验证失败导致权限不足错误

我在用Python结合Firebase REST API操作Firestore时遇到权限问题:

  • 当Firestore规则设置为需要用户认证时,执行代码会抛出missing or insufficient permission错误
  • 切换到完全开放的规则则能正常运行,但开放规则存在严重安全风险,希望修复代码以适配安全规则

两种规则对比

需认证的安全规则(报错)

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

完全开放规则(正常运行)

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
    }
  }
}

我的初始化及注册代码

# initialization
app = firebase.initialize_app(firebaseConfig)
auth = app.auth()
db = app.firestore()

# signup method
def signUp():
    clear()
    print('Signup menu')
    print('Never forget your password or email; you will lose all your credits.\nIf this happens, contact furjack')
    email = input("Enter your email address: ")
    password = input("Enter your password: ")

    try:
        user_info = auth.create_user_with_email_and_password(email, password)
        user_id_token = user_info['idToken']

        user_wallet_ref = db.collection('users-wallet').document(email)
        user_wallet_ref.set({'wallet': 0})

        print("Successfully signed up")
        auth.send_email_verification(user_id_token)
        print('We have sent you a verification email. Please verify your email to use the app.')

        input('Press enter to continue...')

        logIn()
    except:
        print(f"Error during signup")
        input('Press enter to continue...')
        exit()

请问我哪里出错了?还是Google方面的问题?


问题原因及解决方法

原因

创建用户后,调用Firestore的set操作时没有携带用户的认证令牌。Firestore的安全规则要求request.auth != null,但当前请求未被认证,因此被规则拒绝,抛出权限不足错误。

解决方法

在执行Firestore的set操作时,传入用户的idToken作为认证参数,让Firestore识别到当前请求来自已认证用户。

修改代码中的set调用,添加token参数:

user_wallet_ref.set({'wallet': 0}, token=user_id_token)

create_user_with_email_and_password返回的idToken是有效的用户认证凭证,用它签名Firestore请求后,规则中的request.auth会被正确赋值,从而通过权限验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:56:17