Firebase身份验证电子邮件提供程序仅允许创建新帐户

wz1wpwve  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(313)

我有两个Firebase项目,它们都使用Android和iOS的Firebase身份验证。在一个项目上,身份验证正常工作,并符合预期。
在这个麻烦的项目上,Firebase身份验证不适用于任何已经出现在Firebase控制台中的预先存在的用户。对于这些用户,FirebaseUI不正确地显示一个创建新帐户的屏幕,然后如果您继续这样做,UI显示“电子邮件帐户注册不成功”Android日志中出现以下错误。帐户创建不成功并不奇怪,因为用户已经存在。真正的问题是Firebase Auth UI不应该显示现有用户的帐户创建屏幕。当显示帐户创建屏幕时,日志中不会显示错误。
或者,如果你用一个唯一的电子邮件创建一个全新的帐户,一切都按预期工作。但是如果你出去,然后用这个帐户回来,我得到了上面描述的相同的错误序列。
Android代码在这些项目之间是相同的-唯一不同的是google-services.json将其链接到两个Firebase帐户中的一个。在两个iOS应用程序上,有问题的Firebase帐户存在相同的症状。我已经尝试删除并重新添加电子邮件提供程序,但这没有区别。
有问题的Firebase帐户可能有什么问题?

  1. 2023-11-13 09:48:46.407 14512-14512/net.llamadigital.safetyonsite2 W/EmailProviderResponseHa: No providers known for user (<redacted>[email protected]) this email address may be reserved.
  2. 2023-11-13 09:48:46.416 14512-14512/net.llamadigital.safetyonsite2 E/AuthUI: A sign-in error occurred.
  3. com.firebase.ui.auth.FirebaseUiException: Unknown error
  4. at com.firebase.ui.auth.viewmodel.email.EmailProviderResponseHandler$StartWelcomeBackFlow.onSuccess(EmailProviderResponseHandler.java:111)
  5. at com.firebase.ui.auth.viewmodel.email.EmailProviderResponseHandler$StartWelcomeBackFlow.onSuccess(EmailProviderResponseHandler.java:98)
  6. at com.google.android.gms.tasks.zzm.run(com.google.android.gms:play-services-tasks@@18.0.2:1)
  7. at android.os.Handler.handleCallback(Handler.java:958)
  8. at android.os.Handler.dispatchMessage(Handler.java:99)
  9. at android.os.Looper.loopOnce(Looper.java:205)
  10. at android.os.Looper.loop(Looper.java:294)
  11. at android.app.ActivityThread.main(ActivityThread.java:8171)
  12. at java.lang.reflect.Method.invoke(Native Method)
  13. at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
  14. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)

字符串
下面是用于启动登录的代码。

  1. // Choose authentication providers
  2. List<AuthUI.IdpConfig> providers = Arrays.asList(
  3. new AuthUI.IdpConfig.EmailBuilder().build());
  4. // You must provide a custom layout XML resource and configure at least one
  5. // provider button ID. It's important that that you set the button ID for every provider
  6. // that you have enabled.
  7. AuthMethodPickerLayout customLayout = new AuthMethodPickerLayout
  8. .Builder(R.layout.layout_login)
  9. .setEmailButtonId(R.id.emailButton)
  10. .build();
  11. // Create and launch sign-in intent
  12. Intent signInIntent = AuthUI.getInstance()
  13. .createSignInIntentBuilder()
  14. .setAuthMethodPickerLayout(customLayout)
  15. .setAvailableProviders(providers)
  16. .setTheme(R.style.Theme_SOS)
  17. .build();
  18. signInLauncher.launch(signInIntent);


x1c 0d1x的数据

vkc1a9a2

vkc1a9a21#

如果您只想在电子邮件选项中使用Firebase身份验证,您必须首先在Firebase控制台中启用Google身份验证。即使您不打算使用Google身份验证,也是如此。
如果你没有这样做,那么Firebase控制台将无法设置电子邮件身份验证所需的OAuth密钥,你将出现我的问题中描述的症状。你可以从Android google-services.json文件中判断这是否是问题所在,因为“oauth_client”值将是一个空数组[]或只有一个带有“client_type”的条目:1.在我的例子中,一个正确的“oauth_client”值有多个条目,如下所示:

  1. "oauth_client": [
  2. {
  3. "client_id": "<redacted>.apps.googleusercontent.com",
  4. "client_type": 1,
  5. "android_info": {
  6. "package_name": "your.app.package.name",
  7. "certificate_hash": "<redacted>"
  8. }
  9. },
  10. {
  11. "client_id": "<redacted>.apps.googleusercontent.com",
  12. "client_type": 3
  13. }
  14. ],

字符串
您实际上不必使用此Google身份验证。它可以在应用程序代码中禁用,如我的问题中的代码片段所示,它只启用电子邮件身份验证。但同样,在下载.json或.plist之前,必须在控制台中启用Google身份验证选项
我在第一个Firebase帐户中没有遇到这个问题的原因是因为我在开发期间启用了Google身份验证,所以一切都正常。一旦我转移到生产Firebase帐户,我就再也没有设置Google身份验证,因为我不想启用它。我没有意识到在Firebase控制台中设置Google身份验证是电子邮件身份验证功能的未记录要求。

展开查看全部

相关问题