fetchSignInMethodsForEmail 返回现有用户的空数组

ycc*_*eam 2 javascript firebase

我正在使用 Firebase 电子邮件和密码身份验证。

我可以在 Firebase 控制台中看到该用户,并且该用户可以登录和注销。

在我的代码中,我正在这样做:

const signInMethods = await fetchSignInMethodsForEmail(getAuth(), email);
Run Code Online (Sandbox Code Playgroud)

但是signInMethods是一个空数组(与预期相反['password'])。

知道为什么会发生这种情况吗?

预期行为: 返回的值fetchSignInMethodsForEmail应反映刚刚注册的用户可用的登录方法password

实际行为:返回的值fetchSignInMethodsForEmail是一个空数组。

复制说明:

  • 克隆https://github.com/YonatanKra/tauri-demo/

  • add-firebase-auth去分行结账

  • 添加包含.env以下详细信息的文件:启用了电子邮件和密码登录的 Firebase 应用的 VITE_FIREBASE_APP_KEY=*** VITE_FIREBASE_MESSAGING_SENDER_ID=*** VITE_FIREBASE_PROJECT_ID=*** VITE_FIREBASE_APP_ID=*** (将 *** 替换为实际详细信息)

  • 跑步npm i

  • 跑步npm run dev

  • 转到控制台中指定的地址查看 UI

  • 输入电子邮件和密码并登录。

  • 查看用户是否出现在 Firebase 控制台中

  • 刷新应用程序以返回登录屏幕

  • auth.ts在文件第 10 行设置调试点。

  • 使用相同的凭据登录

  • 看到返回的值是一个空数组

Tes*_*ker 6

从 9 月 15 日开始,所有新的 Firebase 项目默认启用电子邮件枚举保护。这实际上破坏了该fetchSignInMethodsForEmail方法。

createAuthUri根据文档:“在所有平台上调用REST API 或fetchSignInMethodsForEmail客户端 SDK 方法时,不再返回指定电子邮件地址的登录方法列表”。

有关更多详细信息,您可以查看完整文档

为了使其再次工作,您必须禁用电子邮件枚举保护。为此,您应该通过运行以下命令来获取项目的访问令牌:

gcloud auth print-access-token --project=PROJECT_ID

然后按照文档中的详细说明提出补丁请求:

curl -X PATCH -d "{'emailPrivacyConfig':{'enableImprovedEmailPrivacy':false}}" \
    -H 'Authorization: Bearer ACCESS_TOKEN' \
    -H 'Content-Type: application/json' -H 'X-Goog-User-Project: PROJECT_ID' \
    "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/config?updateMask=emailPrivacyConfig"
Run Code Online (Sandbox Code Playgroud)

  • 或者您可以执行以下操作:从 Firebase Web 控制台转到“身份验证”>“设置”>“用户操作”并取消选中“电子邮件枚举保护(推荐)” (2认同)