如何以认证用户身份在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
相关产品推荐
相关产品推荐

