Firestore 缺少或权限不足 firebase-rest-api python
基本上,正如我在标题中提到的,我的问题是,当数据库规则设置成这样时,我会遇到这个错误。
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。如果我没说清楚,你应该明白我想表达的意思。谢谢,如果这对你有帮助,请给这个答案点赞,让更多人也能得到帮助,因为很多人都在寻找这个解决方案。