You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32基于MicroPython带认证获取Firebase实时数据库数据问题

解决Firebase实时数据库权限拒绝问题

你当前的问题核心是:请求中auth参数传的是用户UID,但Firebase实时数据库要求的是用户登录后生成的ID令牌(ID Token),而非UID本身。以下是修正步骤:

1. 获取正确的ID令牌

使用micropython-firebase-auth库登录时,除了UID,还会返回idToken字段,这才是用于身份验证的凭证。示例代码如下:

from firebase_auth import FirebaseAuth

auth = FirebaseAuth("<你的Firebase API_KEY>")
# 邮箱密码登录获取用户凭证
user = auth.sign_in_with_email_and_password("<注册邮箱>", "<密码>")
# 提取关键的ID令牌
id_token = user['idToken']
# 这个UID用于规则校验,但不是请求参数
uid = user['localId']

2. 用ID令牌发起合法请求

修改你的urequests请求,将auth参数替换为获取到的id_token:

import urequests

def get_data(id_token):
    url = f"https://<DATABASE_NAME>.firebaseio.com/<NODE>.json?auth={id_token}"
    response = urequests.get(url)
    # 增加基础错误处理
    if response.status_code == 200:
        return response.json()
    else:
        print(f"请求失败: {response.status_code}, {response.text}")
        return None

# 调用时传入获取到的id_token
data = get_data(id_token)

3. 额外校验点

  • 确认数据库规则中的<My uid>和登录用户的uid(即user['localId'])完全一致,注意字符大小写和完整性
  • 检查请求的数据库节点路径是否正确,避免拼写错误
  • ID令牌默认有效期为1小时,长期运行的设备需要调用auth.refresh(user['refreshToken'])来刷新令牌,避免过期导致权限拒绝

内容的提问来源于stack exchange,提问作者Francisco Castorena S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 16:07:49