获取 Firebase 电话身份验证 OTP 时出错

Posted

技术标签:

【中文标题】获取 Firebase 电话身份验证 OTP 时出错【英文标题】:Error while geting Firebase Phone Auth OTP 【发布时间】:2021-02-19 13:01:27 【问题描述】:

我正在尝试实施 Firebase 电话验证。我已在 Firebase 控制台上启用电话验证。我已生成密钥库并将 SHA 签名添加到控制台。

依赖:

dependencies 
    def multidex_version = "2.0.1"
    implementation platform('com.google.firebase:firebase-bom:26.0.0')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.google.firebase:firebase-analytics'
    implementation "androidx.multidex:multidex:$multidex_version"
    implementation 'com.google.firebase:firebase-auth'
    implementation 'com.google.firebase:firebase-core'
    implementation 'com.google.firebase:firebase-analytics'
    implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'


phone_verification.dart

                await FirebaseAuth.instance.verifyPhoneNumber(
                  phoneNumber: '+1234567890',

                  verificationCompleted: (PhoneAuthCredential credential) 
                    print('verificationCompleted');
                    
                  ,
                  verificationFailed: (FirebaseAuthException e) 
                    print('verificationFailed');
                    if (e.code == 'invalid-phone-number') 
                      print('The provided phone number is not valid.');
                    
                    else 
                      print('Some error occoured: $e');
                    
                  ,
                  codeSent: (String verificationId, int resendToken) async 
                    print('codeSent');

                    // Update the UI - wait for the user to enter the SMS code
                    String smsCode = '123456';

                    // Create a PhoneAuthCredential with the code
                    PhoneAuthCredential phoneAuthCredential = PhoneAuthProvider.credential(verificationId: verificationId, smsCode: smsCode);
                  
                  ,
                  timeout: const Duration(seconds: 60),
                  codeAutoRetrievalTimeout: (String verificationId) 
                    print("Timeout: $verificationId");
                  ,
                );

当执行上述块时,收到以下错误。 控制台输出:

E/FirebaseAuth: [GetAuthDomainTask] Error getting project config. Failed with 
      "error": 
        "code": 400,
        "message": "INVALID_CERT_HASH",
        "errors": [
          
            "message": "INVALID_CERT_HASH",
            "domain": "global",
            "reason": "invalid"
          
        ]
      
    
     400
V/FA: Recording user engagement, ms: 1165
E/zza: Failed to get reCAPTCHA token - calling backend without app verification

【问题讨论】:

连同错误日志,请添加有关您尝试执行的操作的更多详细信息。从您收到此错误的位置添加代码 sn-p 我也面临同样的问题。有什么想法吗? 面临同样的问题.. 同样的问题。似乎与应用程序 Gradle firebase auth library 有关。不过,更新它对我不起作用。 您是否将 sha1 添加到 firebase 控制台? 【参考方案1】:

@CubeRootX 和@user13864571

您的问题与 SHA1 和 SHA256 密钥有关。您必须添加它们来验证您的证书。

转到

项目的 Firebase 控制台 身份验证 项目设置(来自项目概览附近的设置按钮) 添加指纹 添加密钥库的 SHA-1 和 SHA-256 值。

您可以像这样从 gradle 获取密钥库。

./gradlew 签名报告

阅读本文了解更多信息:https://firebase.google.com/docs/auth/android/phone-auth#enable-app-verification

【讨论】:

【参考方案2】:

在 Firebase 控制台的 Authentication

下启用 Phone 选项

【讨论】:

【参考方案3】:

Error 400 表示请求错误,可能是以下三种原因之一:-

    检查是否在 Firebase 控制台中启用了电话身份验证选项。启用它。 检查Google cloud console中是否启用了Android设备检查API。启用它。 检查是否将 SHA-1 和 SHA-256 添加到您的 Firebase 项目中。添加如下:

在 firebase 控制台中打开您的项目 -> 转到项目设置 -> 点击添加指纹(在页面底部) -> 在此处添加 SHA-1 和 SHA-256 值。 Image for reference

您可以通过以下方式获取您的 android studio 项目的 SHA 值:-

点击右上角的gradle -> task -> android -> signingReport -> 运行signingReort Image for reference后获取底部的SHA值

如果问题未解决,请关注documentation。

【讨论】:

【参考方案4】:

我在这里被困了一个星期,只是发现我正在使用的密钥被限制在另一个应用程序中,因此在我的应用程序中尝试使用它时失败了。所以我首先在Android设备验证中取消了凭据选项卡中的限制,一切都恢复正常

【讨论】:

以上是关于获取 Firebase 电话身份验证 OTP 时出错的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 电话身份验证 OTP 消息模板问题

带有电话号码 OTP 的 AWS Cognito 身份验证,就像 firebase,没有 Amplify

使用 Firebase 和 Flutter 通过 OTP 验证电话号码

Firebase firestore 获取未经身份验证的用户文档

Firebase 身份验证 Flutter 中的电话号码

如何在angular4的firebase电话身份验证中重新发送短信验证?