Я использую PAW, чтобы попробовать и протестировать различные облачные функции, развернутые с Firebase. Приложение использует аутентификацию по телефону, однако в настоящее время практически нет документации о том, как выполнить аутентификацию по номеру телефона через REST API.
Я внес в белый список номер телефона для тестирования согласно инструкции здесь.
Похоже, что мне нужно вызвать метод 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 для тестирования?
Нет, я не. Извините.
Почему вы отправляете "applicationVerifier": {"type": "recaptcha"} в качестве значения запроса / Где вы его нашли. Я нашел запросы javascript и нашел там только параметр recaptchaToken:, но не могу получить его по запросу сценария
Для POST REST API вы должны передать токен reCAPTCHA вместо объекта captcha, который вы передаете. Вы можете получить токен в функции обратного вызова при создании RecaptchaVerifier
window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('my_btn', {
'size': 'invisible',
'callback': function(response) {
// reCAPTCHA solved, allow signInWithPhoneNumber.
recaptchaToken = response;
.....
}
});
Эта статья мне помогла - https://medium.com/@shangyilim/verifying-phone-numbers-with-firebase-phone-authentication-on-your-backend-for-free-7a9bef326d02
key
- это переменная среды)idToken
также динамическим значением реакции телаidToken
в любых других последующих запросах, которые вы выполняете к Firebase.Лучшее в добавлении переменных в качестве динамических значений ответа тела - это то, что вы можете связать их в цепочку и вызывать их в последовательности:
Я все еще не понял, какое значение имеет sessioninfo и как мне это получить? Кроме того, какой инструмент используется для его создания?
Я использую PAW, клиент отдыха для MAC OS. Тот же самый, который использует OP и также указал, что использует в своем описании вопроса. sessionInfo - это имя параметра, который firebase ожидает для вызова verifyPhoneNumber.
После большого количества исследований (я изо всех сил пытаюсь создать автоматические тесты для моего потока «входа в систему с телефона»), я наконец нашел решение для этого, основанное на ответе @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
Вы нашли для этого какое-нибудь решение?