如何调试Google Identity Platform自定义声明无法通过Firebase存储规则验证?
调试Firebase Storage权限拒绝问题
我为Firebase Storage配置了以下规则:
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { allow write: if request.auth.token.role == "admin"; } }
通过以下Node.js代码,已验证目标UID具备admin角色:
const admin = require('firebase-admin'); const serviceAccount = require('./key-file.json'); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), projectId: "some-project-id", }); const uid = 'my-uid'; admin.auth().getUser(uid) .then((userRecord) => { console.log(userRecord.customClaims); });
示例输出:
{ role: 'admin' }
但我的Dart客户端尝试上传文件时,收到权限拒绝提示。上传代码如下:
print('Current UID: ${FirebaseAuth.instance.currentUser?.uid}'); final testFileContent = Uint8List.fromList('This is a test file'.codeUnits); FirebaseStorage.instance.ref().child('test.txt').putData(testFileContent);
日志信息:
I/flutter ( 7630): Current UID: X2vSwXi5PIeOWkQOCmXxvzqTPem2 E/StorageException( 7630): StorageException has occurred. E/StorageException( 7630): User does not have permission to access this object.
我已完成的常规排查步骤:
- 确认项目ID正确
- 确认存储桶正确(仅存在一个存储桶)
- 等待自定义声明传播超过1小时
- 登出并重新登录
额外调试建议
- 在客户端验证自定义声明:在Dart代码中获取当前用户的ID Token并解析,确认
role声明是否存在。示例代码:
final idTokenResult = await FirebaseAuth.instance.currentUser?.getIdTokenResult(); print('Custom claims: ${idTokenResult?.claims}');
如果输出中没有role: 'admin',说明客户端的Token未更新,可尝试强制刷新Token:
await FirebaseAuth.instance.currentUser?.getIdToken(true);
- 临时放宽规则测试:修改Storage规则,先允许该特定UID写入,验证是否能成功上传,以此排除声明以外的问题:
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { allow write: if request.auth.uid == "X2vSwXi5PIeOWkQOCmXxvzqTPem2"; } }
如果上传成功,说明问题出在自定义声明的传递或规则判断上;如果还是失败,检查客户端Auth状态是否正常、存储桶是否匹配。
- 检查规则匹配范围:当前规则匹配的是存储桶下的所有对象,但如果上传路径有特殊结构,可尝试明确指定路径测试,比如:
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /test.txt { allow write: if request.auth.token.role == "admin"; } } }
- 启用Firebase Auth调试日志:在Dart客户端开启Auth调试日志,查看Token获取和验证过程是否有异常:
FirebaseAuth.instance.setLoggingEnabled(true);
内容的提问来源于stack exchange,提问作者Dr-Bracket
相关产品推荐
相关产品推荐

