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

如何以认证用户身份在firebase functions:shell中测试onCall函数?

在Shell中以登录用户身份测试Firebase onCall函数的方法

完全可以在Shell中模拟登录用户测试onCall函数,不用复杂的键位映射,下面是具体步骤:

1. 获取用户ID令牌

先通过curl调用谷歌身份验证接口获取测试用户的ID令牌,把结果存到环境变量里方便后续使用:

# 替换成你的Firebase Web API密钥、测试用户邮箱和密码
ID_TOKEN=$(curl -s "https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=你的WebAPI密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "测试用户邮箱@example.com",
    "password": "测试用户密码",
    "returnSecureToken": true
  }' | jq -r '.idToken')

注意:需要提前安装jq工具来解析JSON返回结果。

2. 在Functions Shell中注入用户身份

启动Firebase Functions Shell:

firebase functions:shell

进入Shell后,先初始化Admin SDK(如果还没初始化),然后用获取到的令牌验证并构造用户上下文:

// 初始化Admin SDK(仅首次进入Shell时需要)
const admin = require('firebase-admin');
admin.initializeApp();

// 验证令牌并获取用户信息
const decodedToken = await admin.auth().verifyIdToken(process.env.ID_TOKEN);

// 调用你的onCall函数,传入业务参数和用户上下文
await yourOnCallFunctionName({ /* 这里放函数需要的业务参数 */ }, {
  auth: {
    uid: decodedToken.uid,
    token: decodedToken
  }
});

这样函数就能识别到当前调用是来自已登录的测试用户。

3. 简化流程的小技巧

把获取令牌和启动Shell的操作写成Shell脚本,比如test-oncall.sh:

#!/bin/bash

# 配置你的参数
API_KEY="你的WebAPI密钥"
TEST_EMAIL="测试用户邮箱@example.com"
TEST_PASSWORD="测试用户密码"

# 获取令牌
ID_TOKEN=$(curl -s "https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=$API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "'"$TEST_EMAIL"'",
    "password": "'"$TEST_PASSWORD"'",
    "returnSecureToken": true
  }' | jq -r '.idToken')

# 导出令牌到环境变量,启动Functions Shell
export ID_TOKEN
firebase functions:shell

给脚本添加执行权限(chmod +x test-oncall.sh),之后每次运行脚本就能直接进入带用户令牌的Shell,不用重复输入命令。

内容的提问来源于stack exchange,提问作者lando2319

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:17:23