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
相关产品推荐
相关产品推荐

