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

9fkzdhlc  于 2023-05-01  发布在  其他
关注(0)|答案(3)|浏览(120)

我正在使用Firebase的JS SDK构建一个开源项目。我的目标是允许贡献者使用Firebase模拟器在本地运行项目,这样他们就不需要任何真实的凭证。Firebase emulator docs指定“您可以在不创建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);
}

上面的代码将触发以下错误:
Uncaught(in promise)FirebaseError:Firebase:错误(auth/invalid-api-key)
在真实的世界中,我会用apiKey调用initializeApp(),但这里我只想模拟身份验证。我还尝试过根本不调用initializeApp(),而不带任何参数地调用getAuth(),但它会触发相同的错误。
据推测,API密钥需要创建一个项目,那么实际上可以在不创建Firebase项目的情况下运行Firebase auth模拟器吗?

kt06eoxx

kt06eoxx1#

是的。
演示Firebase项目没有真实的的Firebase配置,也没有实时资源。这些项目通常通过代码实验室或其他教程访问。
演示项目的项目ID有**demo-**前缀。
Firebase文档
运行firebase emulators:start --project demo-[ANYTHING_YOU_WANT]
例如firebase emulators:start --project demo-test-project

thtygnil

thtygnil2#

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

8ftvxx2r

8ftvxx2r3#

让我们来看看这个游戏,但我发现我可以在使用模拟器时避免auth/invalid-api-key错误,只需在测试中将apiKey: "any-string-value"传递给initializeApp

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

这似乎在此(打开,但不活动)问题中被跟踪:
https://github.com/firebase/firebase-js-sdk/issues/6776
apiKey的检查是在客户端完成的,它是在创建auth模拟器之前附加的,所以可能不需要。 www.example.com
希望这对某人有帮助(从Firebase文档中得到看似简单的答案非常棘手)。

相关问题