firebase Google Cloud -无法使用其余API验证具有电话号码的用户

k97glaaz  于 2022-11-17  发布在  Go
关注(0)|答案(1)|浏览(233)

我正在尝试使用Rest API并按照下面给出的文档对具有电话号码的用户进行身份验证。
https://cloud.google.com/identity-platform/docs/reference/rest/v1/TopLevel/getRecaptchaParamshttps://cloud.google.com/identity-platform/docs/reference/rest/v1/accounts/sendVerificationCodehttps://cloud.google.com/identity-platform/docs/reference/rest/v1/accounts/signInWithPhoneNumber
只是让你知道,在同一个项目下的云控制台身份平台和其他所需的API是启用的。

** curl 请求以生成reCaptcha令牌:**

curl --location --request GET 'https://identitytoolkit.googleapis.com/v1/recaptchaParams?key=[API_KEY]' \
--header 'Content-Type: application/json'

回应:

{
    "kind": "identitytoolkit#GetRecaptchaParamResponse",
    "recaptchaStoken": "zB06Pvo-22dUOWZiimFpRDUG5Dd9P5Be6IJIjz2xna9cmr-tnD1l-uhVvT5SYj6T5LsDFBUbkHetPv-fG5zF6VLxjl15LuGMuFr1170PhDo",
    "recaptchaSiteKey": "6LcMZR0UAAAAALgPMcgHwga7gY5p8QMg1Hj-bmUv"
}

请求将验证码发送到指定号码:

curl --location --request POST 'https://identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode?key=[API_KEY]' \
--header 'Content-Type: text/plain' \
--data-raw '{
  "phoneNumber": "+923446800107",
  "recaptchaToken": "6LcMZR0UAAAAALgPMcgHwga7gY5p8QMg1Hj-bmUv"
}'

回应:

{
    "error": {
        "code": 400,
        "message": "CAPTCHA_CHECK_FAILED : Recaptcha verification failed - MALFORMED",
        "errors": [
            {
                "message": "CAPTCHA_CHECK_FAILED : Recaptcha verification failed - MALFORMED",
                "domain": "global",
                "reason": "invalid"
            }
        ]
    }
}

根据文档,我在发送验证代码API请求中将reCaptcha请求响应中的“recaptchaSiteKey”字段值用作“recaptchaToken”,但收到错误“CAPTCHA_CHECK_FAILED:Recaptcha验证失败-格式错误””。
有人能帮我解决这个问题吗?或者告诉我哪里做得不对?
正如我前面提到的,我已经在谷歌云中启用了所有需要的API,如身份平台,身份工具包。
我正在使用相同的API密钥从谷歌云项目凭据。

d4so4syb

d4so4syb1#

ReCaptcha要求你把这个站点密钥插入到一个网页中,这个网页用来验证用户是否是机器人。你会想把这个站点密钥插入到你生成的recaptcha页面的data-sitekey属性中。和iOS证明提供程序不允许您在用户未提供某种证明确认的情况下代表用户发出请求。This is a really great example如何设置。简短的代码如下所示:

HTML网页

<html>
  <head>
    <title>reCAPTCHA demo: Simple page</title>
    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
  </head>
  <body>
    <div id="example3"></div>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit"
        async defer>
  </body>
</html>

Java脚本页面

var verifyCallback = function(response) {
        alert(response);
      };

grecaptcha.render('example3', {
          'sitekey' : 'your-site-key-from-recaptcha-json-response',
          'callback' : verifyCallback,
          'theme' : 'dark'
        });

所以当你的用户点击reCaptcha进行认证时,他们会被验证为不是机器人,然后他们会得到一个密钥,他们可以提交给你的服务。记住,你不能从任何网站或页面任意运行reCaptcha,它需要是一个在authentication tab授权域下的Firebase控制台中验证过的页面。

相关问题