簡體   English   中英

Firebase REST API 使用電話號碼進行身份驗證

[英]Firebase REST API Authenticate With Phone Number

我正在使用 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 通過列入白名單的電話號碼進行身份驗證以進行測試?

  1. 創建你的驗證碼請求( key是一個環境變量)

發送驗證碼第1部分 發送驗證碼第2部分

  1. (但這是可選的)使會話信息成為正文響應動態值

在此處輸入圖片說明

  1. 創建您的驗證電話號碼請求

在此處輸入圖片說明

  1. (同樣,可選)使idToken也是一個idToken響應動態值

在此處輸入圖片說明

  1. 在您對 Firebase 執行的任何其他后續請求中使用idToken動態值

在此處輸入圖片說明

將變量添加為身體響應動態值的最佳部分是您可以將它們鏈接起來並按順序調用它們:

在此處輸入圖片說明

經過大量研究(我正在努力為我的“使用電話登錄”流程創建自動化測試),我終於根據@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

對於 REST API POST,您必須傳遞reCAPTCHA 令牌而不是您傳遞的驗證碼對象。 創建 RecaptchaVerifier 時可以在回調函數中獲取token

        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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM