StyledFirebaseAuth(验证AuthUri方法)在两个不同的项目之间接收不同的请求响应

y3bcpkx1  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(90)

我一直在为一个自由项目使用连接到firebase的Next JS 13构建一个应用程序,并使用来自react-firebaseeui/StyledFirebaseAuth组件的StyledFirebaseAuth来处理我的身份验证。在尝试将我的应用迁移到新的firebase项目进行生产后,我遇到了一个问题,其中StyledFirebaseAuth将始终迫使我关闭帐户注册流程,即使我使用以前创建的帐户的电子邮件地址。这两个项目之间没有区别,只是生产Firebase项目连接到Google Cloud项目,而开发项目没有。
在深入研究了StyledFirebaseAuth组件在连接到firebase开发项目和生产项目时发送的请求后,我注意到来自GoogleidentityToolkit API验证AuthUri方法没有返回相同的响应,尽管发送了完全相同的有效负载。当连接到开发项目时,它会响应以下内容:

{
  "kind": "identitytoolkit#CreateAuthUriResponse",
  "allProviders": [
    "password"
  ],
  "registered": true,
  "sessionId": "wR0zw4TO5qPpIgvxrqY_bANyP4s",
  "signinMethods": [
    "password"
  ]
}

当连接到生产项目时,它会响应:

{
  "kind": "identitytoolkit#CreateAuthUriResponse",
  "sessionId": "wR0zw4TO5qPpIgvxrqY_bANyP4s"
}

同样,两个请求的有效负载看起来完全相同:

Dev Payload

{identifier: "[email protected]", continueUri: "http://localhost:3000/"}

生产负载

{identifier: "[email protected]", continueUri: "http://localhost:3000/"}

我还附加了两个项目的firebase配置对象,以防我遗漏了一些东西:

开发配置

let firebaseConfig = {
   apiKey: "AIzaSyCefhN_WDoVg78rqE6xvsxZ2mhog2R9q58",
   authDomain: "wattleartcreations.firebaseapp.com",
   projectId: "wattleartcreations",
   storageBucket: "wattleartcreations.appspot.com",
   messagingSenderId: "947361534354",
   appId: "1:947361534354:web:cf323c4a5c771ad1ceb14b",
   measurementId: "G-X3LFHN1S9C"
};

生产配置

const firebaseConfig = {
  apiKey: "AIzaSyDVe5PNLzSS0-cNH-lJiecKAuo1PZ6JcNs",
  authDomain: "rare-journey-397519.firebaseapp.com",
  projectId: "rare-journey-397519",
  storageBucket: "rare-journey-397519.appspot.com",
  messagingSenderId: "905320577101",
  appId: "1:905320577101:web:40a93e1d25e7a9cff20404",
  measurementId: "G-X3LFHN1S9C"
};

我已经检查过了,以确保所有正确的网址都已经在firebase和谷歌云项目中列入白名单,并且在项目中启用了适当的auth提供程序。我猜是因为我无法找到我发送的电子邮件地址,但是我没有从请求中得到任何错误响应。我不明白为什么API在两个项目之间返回不同的响应。边注,如果我调用firebase auth函数signinWithEmailAndPassword与电子邮件和密码硬编码,它工作得很好,只有当使用StyledFirebaseAuth组件时,我遇到了这个问题。
有人能给我一些建议来解决这个问题吗?

wljmcqd8

wljmcqd81#

如果您在2023年9月15日或之后创建了项目,则默认情况下会启用电子邮件枚举保护:
https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection

  • 在所有平台上调用SSL AuthUri REST API或fetchSignInMethodsForEmail客户端SDK方法时,不再返回指定电子邮件地址的登录方法列表。*

要禁用电子邮件枚举保护,请执行以下步骤:
在Google Cloud控制台中,使用gcloud auth print-access-token命令打印项目ID的访问令牌:

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

使用Identity Toolkit API禁用电子邮件枚举保护:

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"

相关问题