Firebase Realtime Database权限拒绝问题排查(Pyrebase4+Kivy)
问题分析与解决
核心问题
你遇到的权限拒绝错误,是因为Pyrebase4的数据库操作没有携带用户认证的Token,导致Firebase规则判断auth为null,触发Permission denied。虽然你已经完成了用户登录,但默认情况下,Pyrebase的数据库实例不会自动关联当前登录用户的认证信息。
解决方案
1. 初始化数据库时传入认证Token
在获取数据库实例时,将登录返回的idToken传入,这样后续所有数据库操作都会自动带上认证信息:
# 原代码 db = firebase.database() # 修改为 db = firebase.database(user=log_in['idToken'])
2. 或在单个请求中携带Token
如果只需要在特定请求中认证,也可以在get()方法里添加params参数:
user_info = db.child("users").child(uid).get(params={'auth': log_in['idToken']})
3. 修复数据库规则的语法问题(可选)
你的规则里最后一行.write": "auth != null",多了一个冗余逗号,虽然Firebase通常能兼容,但可能导致规则解析异常,建议修正为:
{ "rules": { "users": { ".read": "auth != null", ".write": "auth != null" } } }
验证逻辑
修改后,数据库请求会携带用户的idToken,Firebase会验证Token有效性,并将auth对象注入规则判断,此时auth != null条件成立,即可正常读取数据。
内容的提问来源于stack exchange,提问作者Airton Joao Tassin Junior
相关产品推荐
相关产品推荐

