如何在没有API密钥的情况下模拟Firebase身份验证

3
我正在使用Firebase的JS SDK构建一个开源项目。我的目标是允许贡献者使用Firebase模拟器在本地运行该项目,从而不需要真实的凭据。Firebase模拟器文档指定了“您可以在不创建Firebase项目的情况下运行模拟器”。这正是我想要的!
在运行firebase init之后,我编写了以下代码。它会触发一个弹出窗口,允许用户通过GitHub进行登录:
import { initializeApp } from "firebase/app";
import { connectAuthEmulator, getAuth, GithubAuthProvider } from "firebase/auth";

const app = initializeApp({
  projectId: "demo-project",
});

const auth = getAuth(app);
connectAuthEmulator(auth, "http://localhost:9099");

// When users sign in, we call the following method:
async function signIn() {
  const githubAuth = new GithubAuthProvider();
  await signInWithPopup(firebaseClientAuth, githubAuth);
}

上面的代码将触发以下错误:
未捕获的(在 promise 中)FirebaseError: Firebase:错误(auth/invalid-api-key)
在实际情况下,我会使用 apiKey 调用 initializeApp(),但这里我只想模拟身份验证。我也尝试过根本不调用 initializeApp() 并调用没有任何参数的 getAuth(),但它会触发相同的错误。
假设 API 密钥需要创建一个项目,那么是否真的可能在不创建 Firebase 项目的情况下运行 Firebase auth 模拟器?
3个回答

2

是的,它就是。

演示 Firebase 项目没有真正的 Firebase 配置和实时资源。这些项目通常通过 codelabs 或其他教程访问。

演示项目的项目 ID 具有前缀 demo-

Firebase 文档

运行 firebase emulators:start --project demo-[任何你想要的]

例如 firebase emulators:start --project demo-test-project


除了以 demo- 为前缀的项目 ID,我现在需要传递哪些对象属性给 initializeApp() 函数?apiKey、storageBucket 等等。 - Charles Fries

1
“是否可以在不创建 Firebase 项目的情况下运行 Firebase auth 模拟器?”
“不行,您需要将模拟器连接到一个项目。您会注意到在设置说明中,您需要运行firebase init来选择您要在该项目中使用的项目和产品。”

我在问题中没有提到,但我确实先运行了 firebase init。即使如此,我仍然需要提供 API 密钥 - 这是正确的吗? - deammer
据我所知,除了文档中建议的操作之外,您无法更改SDK初始化过程。您可以在GitHub上提交请求,以查看是否可以更改此设置。https://github.com/firebase/firebase-tools - Doug Stevenson

0

来到游戏这里,但我发现我可以通过在测试中向 initializeApp 传递 apiKey: "任意字符串值" 来避免在使用模拟器时出现 auth/invalid-api-key 错误:

initializeApp({ apiKey: "test-api-key" });
connectAuthEmulator(getAuth(), 'http://localhost:8081');

这似乎在这个(开放的,但不活跃的)问题中被追踪:
https://github.com/firebase/firebase-js-sdk/issues/6776

apiKey 的检查是在客户端完成的,在创建 auth emulator 之前就已经添加了,因此可能不需要。 https://github.com/firebase/firebase-js-sdk/blob/master/packages/auth/src/core/auth/register.ts#L68-L71

希望这对某些人有所帮助(从 Firebase 文档中获取看似简单的答案非常棘手)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接