Firestore 缺少或权限不足 firebase-rest-api python

-1 投票
1 回答
37 浏览
提问于 2025-04-14 18:28

基本上,正如我在标题中提到的,我的问题是,当数据库规则设置成这样时,我会遇到这个错误。

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()

所以,基本上我哪里做错了,还是谷歌出错了,或者到底是什么问题?请帮帮我,提前谢谢!

1 个回答

0

好吧,既然没有人能回答,我想分享一下我的发现,虽然这听起来有点奇怪,但这个方法确实有效。

首先,你需要安装

pip install firebase-admin

安装完之后,抱歉,我的键盘有点问题。安装完成后,你需要做一些事情。第二步,去控制台,点击项目名称旁边的齿轮图标,进入项目设置。

现在,不要使用firebase-rest-api中的firestore,而是我们要用firebase_admin。你跟上了吗?接下来,点击服务设置,然后按下“生成新密钥”或者类似的选项,点击它,它会提示你下载一个json文件,下载到你的main.py旁边。完成后,打开你的main.py,像这样导入库:

import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore

导入完库后,我们要告诉firebase admin使用我们从控制台服务部分获得的凭证,代码如下:

cred = credentials.Certificate('/path/to/jsonfile')
firebase_admin.initialize_app(cred)

db = firestore.client()

初始化应该像这样,db将是我们用来进行操作的变量。

现在让我们试一个例子:

user_wallet_ref = db.collection('users-wallet').document('test@gmail.com')
user_wallet_ref.set({'wallet': 0})

太好了,这次测试成功了。基本上,问题在于我们在授权读写时必须使用firebase_admin。如果我没说清楚,你应该明白我想表达的意思。谢谢,如果这对你有帮助,请给这个答案点赞,让更多人也能得到帮助,因为很多人都在寻找这个解决方案。

撰写回答