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

基于Expo的React Native应用使用Firebase JS SDK集成App Check后的认证问题咨询

问题2:启用App Check强制校验后Storage报“用户未认证”

这个问题的核心是:启用App Check强制校验后,Storage要求请求同时满足用户认证和App Check令牌验证,缺一不可。你需要检查这几个关键点:

  1. 确保客户端同时传递Auth和App Check令牌
    首先要确认你在Expo里正确初始化了App Check,并且用AppAttest完成了激活。注意Expo环境下不能直接用Firebase JS SDK的原生AppAttestProvider,需要借助expo-app-check包来获取令牌,再传给Firebase App Check:

    import { initializeApp } from "firebase/app";
    import { getAppCheck } from "firebase/app-check";
    import * as AppCheck from 'expo-app-check';
    
    // 初始化Firebase App
    const firebaseConfig = { /* 你的Firebase配置 */ };
    const app = initializeApp(firebaseConfig);
    
    // 初始化Expo App Check(AppAttest)
    await AppCheck.initializeAppCheck({
      apple: {
        provider: AppCheck.AppleProvider.APP_ATTEST,
        appAttestPublicKeyIdentifier: '你的App Attest公钥ID' // 从Apple Developer后台获取
      },
      // 安卓的配置如果需要的话也加上
    });
    
    // 把Expo的App Check令牌传给Firebase
    const appCheck = getAppCheck(app);
    appCheck.activate(
      new CustomProvider({
        getToken: async () => {
          const tokenResult = await AppCheck.getAppCheckTokenAsync();
          return {
            token: tokenResult.token,
            expireTimeMillis: tokenResult.expireTime
          };
        }
      })
    );
    

    确保你用Firebase SDK的方法操作Storage(比如getDownloadURL),SDK会自动给请求加上X-Firebase-AppCheck头和Auth信息。

  2. 检查Storage的安全规则
    启用App Check强制后,你的Storage规则必须同时验证request.auth和request.appCheck,否则即使有令牌也会被拒绝。比如:

    rules_version = '2';
    service firebase.storage {
      match /b/{bucket}/o {
        match /{allPaths=**} {
          allow read, write: if request.auth != null && request.appCheck != null;
        }
      }
    }
    
  3. 排查开发环境的App Check问题
    在Expo开发模式下,AppAttest可能无法正常工作(因为需要正式签名和Bundle ID),你可以暂时用调试令牌测试:

    • 去Firebase控制台的App Check页面,为你的应用生成调试令牌
    • 客户端初始化时改用调试模式:
      await AppCheck.initializeAppCheck({
        apple: {
          provider: AppCheck.AppleProvider.APP_ATTEST_DEBUG,
          debugToken: '你的调试令牌'
        }
      });
      
  4. 验证App Check令牌的有效性
    可以在客户端打印App Check令牌,然后去Firebase控制台的App Check页面验证令牌是否有效,同时确认你的应用已经在Firebase App Check里完成了配置(比如正确的Bundle ID、App Attest公钥)。


内容的提问来源于stack exchange,提问作者Umair A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:39:07