搬遷 firebase auth user 至另一個firebase專案
前言
若firebase專案與GCP專案有綁定
而服務架設在GAE上,但想要更換GAE地區時
就會遇到這個問題
因為現行GAE建立後是無法刪除的,亦無法更換地區
若要更換,只能重建專案、重新啟用新的GAE
若使用到GCP的功能少,更換的過程其實不難
服務部署完畢後,域名綁定過去即可
但服務有透過firebase接第三方登入的話,問題就出現了!
firebase似乎是無法轉換專案,連帶著須重新建立一個新的firebase
而因密碼雜湊參數不同,原本同一user登入時,會出現不同的uid
就會影響自身DB儲存的firebase uid
導致現行的登入流程無法正確取得user而登入失敗
最好的作法就是轉移firebase auth user,並將其密碼雜湊參數設成一樣
程式面僅須更新firebase json及前端的firebase參數,達到無痛轉換!
明明只要單純在firebase上增加匯出、匯入、編輯密碼雜湊功能就可以很簡單完成的工作
但Google卻沒這麼做= =…只能透過指令手動搬家
作法
一、安裝firebase-tool 與登入
- 打開終端機,安裝firebase-tools ->
npm install -g firebase-tools
- 登入您的帳號 ->
firebase login
二、匯出user
- CD到作業的目錄,因須產生實體檔案
cd ~/desktop/firebase
- 匯出user
firebase --project <來源firebase專案> auth:export users.json --format=json
- 取得密碼雜湊參數
打開網頁,進入firebase<來源firebase專案>
Authentication
->Users
-> user列表右上方的開啟選單
->密碼雜湊參數
複製出來
他會長這個樣子
hash_config {
algorithm: SCRYPT,
base64_signer_key: <SIGNER_KEY>,
base64_salt_separator: <SALT_SEPARATOR>,
rounds: <數字>,
mem_cost: <數字>,
}
三、匯入user
- 打開firebase官方頁面 -> 身份驗證:導入和身份驗證:導出#身份驗證:導入
- 底下的
firebase auth:import ...
程式碼片段裡的 value 是可以編輯的,於此處輸入檔名、前面複製出來的hash_config
內容 - 輸入完畢後複製出來,於最前面補上
--project <目的firebase專案>
,並將沒用到的欄位刪掉。最終指令如下:
firebase --project <目的firebase專案> auth:import users.json \
--hash-algo=SCRYPT \
--hash-key=<SIGNER_KEY> \
--salt-separator=<SALT_SEPARATOR> \
--rounds=<數字> \
--mem-cost=<數字> \
注意!
複製出來的hash_config是json,所以每個欄位後面都會有,
,但終端機裡的指令不應有,
若加上去了,那最後產出來的uid仍會不同!
- 靜待指令執行完成後,即匯入成功!
四、服務的前端、後端更新json、參數
回到程式面
將後端使用的json、前端使用的參數更換成<目的firebase專案>
、部署
若有重新綁定域名需求,再綁定成新的位置
大功告成!