Firebase REST API使用电话号码进行身份验证

Firebase REST API使用电话号码进行身份验证,rest,api,firebase,firebase-authentication,Rest,Api,Firebase,Firebase Authentication,我正在使用PAW尝试和测试Firebase部署的不同云功能。该应用程序使用电话身份验证,但是目前几乎没有关于如何通过RESTAPI实现电话号码身份验证的文档 我已根据白名单列出了测试电话号码 似乎我需要做的是调用verifyPhoneNumber方法,我将其拼凑起来,我需要的REST API端点的格式如下: https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPhoneNumber?key={WEB_API_KEY}

我正在使用PAW尝试和测试Firebase部署的不同云功能。该应用程序使用电话身份验证,但是目前几乎没有关于如何通过RESTAPI实现电话号码身份验证的文档

我已根据白名单列出了测试电话号码

似乎我需要做的是调用
verifyPhoneNumber
方法,我将其拼凑起来,我需要的REST API端点的格式如下:

https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPhoneNumber?key={WEB_API_KEY}
现在我陷入困境的是试图传递预期的数据。看起来此端点需要一个
phoneNumber
和一个
applicationVerifier
对象。我从相应的数据中拼凑了出来

我尝试提出如下请求:

POST /identitytoolkit/v3/relyingparty/verifyPhoneNumber?key={WEB_API_KEY}
Content-Type: application/json; charset=utf-8
Host: www.googleapis.com
Connection: close
User-Agent: Paw/3.1.7 (Macintosh; OS X/10.13.6) GCDHTTPRequest
Content-Length: 73

{"phoneNumber":"+18035551111","applicationVerifier":{"type":"recaptcha"}}
我收到的答复是:

HTTP/1.1 400 Bad Request
Vary: X-Origin
Vary: Referer
Content-Type: application/json; charset=UTF-8
Date: Thu, 13 Sep 2018 16:35:33 GMT
Server: ESF
Cache-Control: private
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
Alt-Svc: quic=":443"; ma=2592000; v="44,43,39,35"
Accept-Ranges: none
Vary: Origin,Accept-Encoding
Connection: close

{
  "error": {
    "code": 400,
    "message": "MISSING_SESSION_INFO",
    "errors": [
      {
        "message": "MISSING_SESSION_INFO",
        "domain": "global",
        "reason": "invalid"
      }
    ]
  }
}

我不确定我在这一点上做错了什么,因为我现在已经没有文档了,只是盲目地猜测参数。如何通过REST API通过白名单电话号码进行身份验证以进行测试?

对于REST API帖子,您必须传递reCAPTCHA令牌,而不是您传递的验证码对象。创建RecaptchaVerifier时,可以在回调函数中获取令牌

        window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('my_btn', {
            'size': 'invisible',
            'callback': function(response) {
                // reCAPTCHA solved, allow signInWithPhoneNumber.
                recaptchaToken = response;
                .....
            }
        });            
这篇文章帮助了我-

  • 创建验证码请求(键
    是一个环境变量)
  • (但这是可选的)将会话信息设置为主体响应动态值
  • 创建您的验证电话号码请求
  • (同样,可选)使
    idToken
    也成为车身响应动态值
  • 在对Firebase执行的任何其他后续请求中使用
    idToken
    动态值
  • 将变量添加为Body Response动态值的最佳部分是,您可以链接它们并按顺序调用它们:

    经过大量研究(我正在努力为我的“电话登录”流程创建自动测试),我终于找到了一个解决方案,基于的答案。希望它将来能帮助人们:)

    考虑到您的电话号码已列入白名单(如问题中所述),第一步是致电firebase发送验证码:

    POST /v1/accounts:sendVerificationCode?key={WEB_API_KEY} HTTP/1.1
    Host: identitytoolkit.googleapis.com:443
    Content-Type: application/json
    Content-Length: 39
    
    {
        "phoneNumber": "{PHONE_NUMBER}"
    }
    
    响应将是
    sessionInfo
    ,如下所示:

    {
        "sessionInfo": "ALiwoWJhYJgtFav1DKc0yBoTwcjjiyQNu240eDJ76GmlH-2i3RmHAYamaPkx3rjEmOBcgrua5QfLw8Nrn_QwjVPO6N09fYsiWQha0-5o2Jb5Hwqxkw7qwsl6YK0gotZ16HmiwqJkyd-stAXTVU1ZIBUwfrFqZmFY7g"
    }
    
    然后,下一步是在firebase中使用登录代码(与白名单中使用的代码相同)和会话信息:

    POST /v1/accounts:signInWithPhoneNumber?key={WEB_API_KEY} HTTP/1.1
    Host: identitytoolkit.googleapis.com:443
    Content-Type: application/json
    Content-Length: 207
    
    {
        "sessionInfo": "ALiwoWJhYJgtFav1DKc0yBoTwcjjiyQNu240eDJ76GmlH-2i3RmHAYamaPkx3rjEmOBcgrua5QfLw8Nrn_QwjVPO6N09fYsiWQha0-5o2Jb5Hwqxkw7qwsl6YK0gotZ16HmiwqJkyd-stAXTVU1ZIBUwfrFqZmFY7g",
        "code": 123456
    }
    
    就这样!回答如下:

    {
        "idToken": "idToken",
        "refreshToken": "refreshToken",
        "expiresIn": "3600",
        "localId": "localId",
        "isNewUser": false,
        "phoneNumber": "{PHONE_NUMBER}"
    }
    

    官方文档中的更多信息:

    您找到解决方案了吗?没有。抱歉。为什么u发送“applicationVerifier”:{“type”:“recaptcha”}作为请求值/您在哪里找到的。我找到了javascript请求,发现只有recaptchaToken:parameter,但无法通过脚本请求获取它。我仍然不明白sessioninfo的值是什么,以及我是如何获取它的?还有,你用什么工具来生成这个?我用的是PAW,一个MAC OS rest客户端。OP使用的同一个,并且在他的问题描述中也指出了他使用的。sessionInfo是firebase希望verifyPhoneNumber调用的参数的名称