我正在使用PAW尝试测试Firebase部署的不同云功能。该应用程序使用电话身份验证,但是目前几乎没有关于如何通过REST API完成电话号码身份验证的文档。
我已根据instructions here将电话号码列入白名单进行测试。
看来我需要做的是调用verifyPhoneNumber
方法,我拼凑得出我需要的REST API端点格式为:
https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPhoneNumber?key={WEB_API_KEY}
现在,我遇到的问题是试图传递期望的数据。看起来此端点期望一个phoneNumber
和一个applicationVerifier
对象。我已经从相应的documentation here中拼凑而成。
我尝试发出如下请求:
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通过列入白名单的电话号码进行身份验证以进行测试?
答案 0 :(得分:5)
key
是环境变量)idToken
设置为主体响应动态值idToken
动态值有关将变量添加为“身体响应动态值”的最好部分是可以链接它们并按顺序调用它们:
答案 1 :(得分:2)
经过大量研究(我正在努力为我的“使用电话登录”流程创建自动化测试),我终于根据 @Danut Pralea 的回答找到了解决方案。希望它会在未来帮助人们:)
考虑到您的电话号码已被列入白名单(如问题中所述),第一步是致电 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}"
}
官方文档中的更多信息:https://cloud.google.com/identity-platform/docs/reference/rest/v1/accounts
答案 2 :(得分:0)
对于REST API POST,您必须传递 reCAPTCHA令牌,而不是传递的验证码对象。创建RecaptchaVerifier时,可以在回调函数中获取令牌
window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('my_btn', {
'size': 'invisible',
'callback': function(response) {
// reCAPTCHA solved, allow signInWithPhoneNumber.
recaptchaToken = response;
.....
}
});