Pyrebase对接Firebase认证后写入实时数据库报401权限错误
问题根因
401权限报错的核心原因是数据库写入请求未携带已登录用户的合法身份凭证,Firebase安全规则无法识别请求对应的用户身份,直接拦截请求。
你的代码虽然完成了邮箱密码登录、令牌刷新、UID提取逻辑,但调用Pyrebase的set()写入方法时,没有传入用户的有效ID令牌,Pyrebase发起的数据库请求默认走未认证匿名身份,完全不满足你配置的$uid === auth.uid的写入权限要求。
修复代码
在写入操作时传入刷新后得到的用户idToken作为认证参数即可,修正后的函数代码如下:
def login(): email = input("Enter email: ") password = input("Enter password: ") user = auth.sign_in_with_email_and_password(email, password) user = auth.refresh(user['refreshToken']) uid_variable = user['userId'] # 提取刷新后的有效身份令牌 user_id_token = user['idToken'] print(uid_variable) print("Successfully logged in!") data = {"test": "test"} # 写入时传入token完成身份校验 db.child("userdata").child(uid_variable).set(data, token=user_id_token)
补充排查项
如果修改后仍报错,可逐一核对以下配置:
- 初始化Pyrebase时填写的
databaseURL必须和你实际的数据库地址完全匹配,注意核对区域后缀、域名,不要连错其他数据库实例 - 打印
uid_variable确认取值和Firebase控制台Authentication面板中对应用户的UID完全一致,不要错取其他字段 - 安全规则修改发布后存在1-2分钟的生效缓存期,刚发布规则不要立刻测试,等待片刻再重试
内容的提问来源于stack exchange,提问作者Kroyz
相关产品推荐
相关产品推荐

