在 Web 本地开发中使用 AppCheck 时,我没有获得调试令牌

Posted

技术标签:

【中文标题】在 Web 本地开发中使用 AppCheck 时,我没有获得调试令牌【英文标题】:I'm not getting Debug Token when using AppCheck in a web Local development 【发布时间】:2021-12-05 21:33:04 【问题描述】:

我决定将 AppCheck 包含到我的项目中。我正在使用 Quasar V2 的网络应用程序中实现这一点。 Quasar 为我提供了一些环境变量,具体取决于我在开发、生产或调试中(它类似于生产,但带有 --debug 标志)。

我在 Firebase 控制台上有两个项目用于我正在构建的这个产品。一个对应于我的 Testing,另一个对应于 Production 环境。请注意,当在某个分支中创建新 PR 时,我正在使用 GitHub 操作触发对 Firebase 托管的部署。这是由 firebase-cli 生成的。

最后,我有我的本地开发。它在模拟器中使用 Firebase 服务。

我的问题是我没有在浏览器控制台中获得 Debug Token。 这是我根据运行环境配置 Firebase 的客户端文件。

/src/boot/firebase.js

import  boot  from 'quasar/wrappers'
import firebase from 'firebase/app'
import 'firebase/app-check'
import 'firebase/functions'
import 'firebase/auth'
import 'firebase/firestore'
import 'firebase/storage'

const firebaseConfigTesting = 
  apiKey: '----------------------------',
  authDomain: '-----------------------',
  projectId: '-------------------------',
  storageBucket: '-----------------',
  messagingSenderId: '------------------',
  appId: '--------------------------',
  measurementId: '-------------------'


let app = null
if (process.env.DEBUGGING || process.env.DEV) 
  app = firebase.initializeApp(firebaseConfigTesting)
  console.log('DEBUGGING || DEV -> app configurada con proyecto testing')
 else if (process.env.PROD) 
  // TODO: Poner config del proyecto firebase de producción.
  app = firebase.initializeApp(firebaseConfigTesting)

const appCheck = firebase.appCheck()
const functions = firebase.app().functions('southamerica-east1')
const auth = firebase.auth()
const db = firebase.firestore()
const storage = firebase.storage()

// When running quasar dev, use Emulators.
if (process.env.DEV) 
  functions.useEmulator('localhost', 5001)
  auth.useEmulator('http://localhost:9099',  disableWarnings: true )
  db.useEmulator('localhost', 9095)
  storage.useEmulator('localhost', 9199)
  self.FIREBASE_APPCHECK_DEBUG_TOKEN = true
  console.log('#======= Corriendo Emuladores =======#')


/*  App check
*   Cada ambiente tiene su Key. En desarrollo, usar debugger token.
* */
if (process.env.DEBUGGING || process.env.DEV) 
  // Enabling AppCheck both in local develoment (DEV) and in Testing enviroment (DEBUGGING)
  appCheck.activate('----------------', true)
 else if (process.env.PROD) 
  // TODO Create AppCheck in production. 


export default boot((/*  app, router, ...  */) => 
)
export 
  app,
  functions,
  auth,
  db,
  storage


在文档 (app-check debug provider) 中,他们有一个使用名为 initializeAppCheck 的函数的示例。我的 SDK 中没有该功能。这是 Firebase SDK 中的内置函数,还是只是他们在文档中使用的实用函数?

最后,我没有收到任何错误。它工作正常,但我没有得到 AppCheck 调试令牌

祝你有美好的一天!

【问题讨论】:

【参考方案1】:

首先,initializeAppCheck() 仅在 API 的最新版本 v9+ 中可用。看起来您使用的是旧版本的 API,其中所有内容都基于 firebase 命名空间(例如,firebase.appCheck()),而在新版本中,您将单独导入所有函数。

所以你有两个解决方案。最简单的方法是升级到 v9。 Here's a migration guide 如果您需要帮助。如果您不想更改太多代码,请尝试使用兼容版本的 v9(在该指南中描述),它允许您使用与 v8 相同的 API。无论您使用的是 v9 的模块化版本还是兼容版本,它都会在 App Check 初始化期间初始化调试模式,允许您像当前一样在代码中设置 self.FIREBASE_APPCHECK_DEBUG_TOKEN。 (兼容版本必须在调用firebase.appCheck.activate()之前设置。在模块化版本中,必须在调用initializeAppCheck()之前设置。)

如果此时无法迁移到 v9,v8 App Check SDK 实际上会在导入 App Check 包时检查调试变量,而不是在初始化 App Check 时(@987654328 @)。这意味着在代码中的任何位置设置它为时已晚。因此,当用户使用 v8 时,我们建议他们在加载主代码包之前在其index.html 页面中的<script> 标记中设置self.FIREBASE_APPCHECK_DEBUG_TOKEN。如果这对您的构建环境来说太难了,我建议升级到 v9。如果您使用 compat,它应该只需要极少的代码更改(只需将导入模式从 firebase/firestore 等更改为 firebase/compat/firestore)。

【讨论】:

感谢克里斯蒂娜,您的回答非常精彩。阅读您的解释后,我正在使用紧凑版本迁移到 V9。现在,它成功地给了我调试令牌。

以上是关于在 Web 本地开发中使用 AppCheck 时,我没有获得调试令牌的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Functions AppCheck 不断让我的设备失败

Firebase AppCheck for Firebase 身份验证

本地开发/调试时的 httpOnly cookie

为啥 Tizen studio 在运行 tizen tv Web 应用程序时每次都清除本地存储?

当 Web 应用程序处于活动状态时,如何在开发环境中运行 MVC 6 Web 应用程序 [重复]

如何在 xampp 中运行两个本地 Web 开发项目