Firexport指南

如何匯出 Firebase Authentication 使用者

Firebase Authentication 的使用者(Users)分頁會列出專案中的每個帳戶,卻無法把它們下載下來:它唯一的選單裡只有密碼雜湊參數。要把使用者匯出成檔案,有三種方法。哪一種合適,取決於檔案的用途:是用來查看、分享或寄送電子郵件的名單,還是要搬到另一個專案。

更新於 2026年10月7日。 方法 1 中的擴充功能 Firexport 是我們開發的。方法 2 和 3 不需要它。

簡短回答

  • 現在就要一份放進試算表的使用者清單: 用瀏覽器擴充功能從使用者(Users)分頁匯出。 方法 1
  • 把使用者連同密碼搬到另一個專案: 先執行 firebase auth:export,再執行 firebase auth:import。 方法 2
  • 需要排程匯出,或依自己的方式安排欄位: 一段簡短的 Admin SDK 指令碼。 方法 3
1. 控制台 + 擴充功能2. Firebase CLI3. Admin SDK 指令碼
準備工作安裝一個 Chrome 擴充功能Node.js 和 Firebase CLINode.js 和 Google Cloud 憑證
格式含標題列的 CSV,或 JSON不含標題列的 CSV,或 JSON含標題列的 CSV(或你的程式碼寫出的格式)
時間控制台顯示的日期(Advanced 為 ISO 8601)epoch 毫秒ISO 8601
自訂聲明Advanced 才有包含包含
密碼雜湊從不讀取包含(需 Editor 或 Owner 角色)不包含

1. 用 Firexport 從 Firebase 控制台匯出

在 Firebase 控制台中,Authentication > 使用者(Users)會把你的使用者顯示在表格中,一次一頁,但沒有任何下載它們的方法。Firexport 是一款免費的 Chrome 擴充功能,會在這個表格上加入一個「匯出」按鈕。

  1. 從 Chrome 線上應用程式商店安裝 Firexport。
  2. 在 Firebase 控制台開啟 Authentication,然後開啟使用者(Users)分頁。
  3. 按一下匯出,它就在新增使用者(Add user)的右側。 Firexport 會走過表格的每一頁,下載一個 CSV 檔案。要匯出 JSON,開啟按鈕旁的 ⋮ 選單並選擇匯出為 JSON。
Firebase Authentication 的使用者(Users)分頁,以及 Firexport 在新增使用者(Add user)旁加入的「匯出」按鈕,其選單已開啟
「匯出」位於新增使用者(Add user)的右側,選單中有 CSV 和 JSON。

檔案裡會有:

  • 在免費版中,每位使用者一列,包含 uid、identifier、disabled、providers、creationTime 和 lastSignInTime:也就是控制台所顯示的表格。日期採用控制台的格式,不含時間,供應商則是 Email 或 Google 這類名稱。
  • 付費方案 Firexport Advanced 會以 Admin SDK 的名稱寫出每位使用者的完整記錄:email、emailVerified、displayName、phoneNumber、photoURL、providerData、customClaims、multiFactor,以及以 ISO 8601(UTC)表示的建立、登入和權杖時間。
  • 無論控制台使用哪種語言,欄名都是英文,所以每次匯出的欄位都相同。

密碼雜湊從不會被讀取,你的使用者資料也只留在你的瀏覽器中:檔案在瀏覽器內產生,除了你的下載資料夾之外哪裡都不會去。不需要服務帳戶金鑰,也不需要設定 CLI,因為它在你已登入的控制台工作階段中執行。它可在 Chrome 及其他以 Chromium 為基礎的瀏覽器中執行。

一次查看一位使用者

要查看單一使用者,把滑鼠游標移到該使用者的那一列上。該列動作最前面的資訊圖示會開啟一張卡片,顯示完整記錄:顯示名稱、電子郵件已驗證、供應商、登入和權杖時間、自訂聲明和第二重驗證。卡片上的複製圖示會以 JSON 格式把這位使用者複製到剪貼簿。兩者都是免費的。

使用者(Users)表格旁一位使用者的詳細資料卡片,顯示供應商、登入時間、自訂聲明和一項第二重驗證
卡片會顯示使用者(Users)表格省略的內容。

不用 CLI、不用服務帳戶金鑰,直接從控制台匯出你的 Firebase 使用者。

加到 Chrome — 免費

2. 用 Firebase CLI 匯出

Firebase CLI 的 auth:export 指令會把專案中的每個帳戶下載到一個檔案。它是為了搭配 auth:import 把使用者搬到另一個專案而設計的,所以包含密碼雜湊和鹽值。這也讓這個檔案等同於憑證:別把它放在共用雲端硬碟,也別用電子郵件寄出。雜湊和鹽值欄位需要在專案上具有 Editor 或 Owner 角色的帳戶。

npm install -g firebase-tools
firebase login
firebase auth:export users.json --project your-project-id
  • 檔案名稱決定格式:users.json 或 users.csv。
  • CSV 沒有標題列。欄位依固定順序排列:UID、電子郵件、電子郵件是否已驗證、密碼雜湊、鹽值、名稱和相片網址, Google、Facebook、Twitter 和 GitHub 各四欄,接著是建立時間、上次登入時間、電話號碼和其他幾欄。Google 的 auth:export 參考資料列出了這些欄位。時間是 epoch 毫秒。
  • JSON 保留 API 自己的名稱:localId、createdAt、lastSignedInAt、providerUserInfo,以及存放自訂聲明的 customAttributes(一個 JSON 字串)。
  • 只有以 Firebase 的 scrypt 演算法雜湊的密碼才會被匯出。以其他演算法匯入、之後一直沒有登入過的使用者,匯出時雜湊和鹽值欄位會是空的。

要搬移使用者,請用舊專案的雜湊參數把檔案匯入另一個專案,這些參數位於 Authentication > 使用者(Users) > ⋮ > 密碼雜湊參數(Password hash parameters)。使用者會保留原本的 UID,也能用相同的密碼登入。

firebase auth:import users.json --project new-project-id \
  --hash-algo=SCRYPT --hash-key=BASE64_SIGNER_KEY --salt-separator=BASE64_SALT_SEPARATOR \
  --rounds=ROUNDS --mem-cost=MEM_COST

3. 用 Admin SDK 指令碼匯出

如果要依自己的方式安排欄位,或者匯出需要排程執行,一段使用 Firebase Admin SDK 的簡短 Node.js 指令碼就能列出所有使用者,並寫出含標題列的 CSV。它需要一個能讀取使用者的帳戶:專案 Owner 或 Editor,或者 Firebase Authentication Viewer 角色。

  1. 安裝 SDK:npm install firebase-admin
  2. 登入以取得本機憑證:gcloud auth application-default login。在伺服器上,改為讓 GOOGLE_APPLICATION_CREDENTIALS 指向服務帳戶金鑰。
  3. 把下面的指令碼存成 export-users.mjs,替換 your-project-id,然後執行 node export-users.mjs。
// Usage: node export-users.mjs   → writes users.csv
import { writeFileSync } from 'node:fs';
import { initializeApp } from 'firebase-admin/app';
import { getAuth } from 'firebase-admin/auth';

initializeApp({ projectId: 'your-project-id' });
const auth = getAuth();

// listUsers returns at most 1,000 users per call, so follow the page token to the end.
const users = [];
let pageToken;
do {
  const page = await auth.listUsers(1000, pageToken);
  users.push(...page.users);
  pageToken = page.pageToken;
} while (pageToken);

// One row per user. Times become ISO 8601. Password hashes are left out: this is a user list, not a backup.
const iso = (time) => (time ? new Date(time).toISOString() : '');
const rows = users.map((user) => ({
  uid: user.uid,
  email: user.email,
  emailVerified: user.emailVerified,
  displayName: user.displayName,
  phoneNumber: user.phoneNumber,
  disabled: user.disabled,
  providers: user.providerData.map((provider) => provider.providerId).join(' '),
  creationTime: iso(user.metadata.creationTime),
  lastSignInTime: iso(user.metadata.lastSignInTime),
  customClaims: user.customClaims ? JSON.stringify(user.customClaims) : '',
}));

// Quote any cell with a comma, a quote or a line break.
function cell(value) {
  const text = value === undefined || value === null ? '' : String(value);
  return /[",\r\n]/.test(text) ? `"${text.replaceAll('"', '""')}"` : text;
}

const columns = ['uid', 'email', 'emailVerified', 'displayName', 'phoneNumber', 'disabled',
  'providers', 'creationTime', 'lastSignInTime', 'customClaims'];
const lines = [columns, ...rows.map((row) => columns.map((column) => row[column]))];
// The byte order mark at the start makes Excel read names in any language correctly.
writeFileSync('users.csv', '' + lines.map((line) => line.map(cell).join(',')).join('\r\n'));
console.log(`Wrote ${rows.length} users to users.csv`);
  • 如果呼叫因為 API「需要配額專案(requires a quota project)」而失敗,執行 gcloud auth application-default set-quota-project your-project-id 後再試一次。
  • listUsers 依 UID 順序回傳使用者,而不是依註冊日期。如果需要那種順序,請自行排序資料列。
  • SDK 只會把密碼雜湊回傳給具有 firebaseauth.configs.getHashConfig 權限的帳戶,而這個指令碼無論如何都不會輸出它們。要連同密碼一起搬移使用者,請使用方法 2。

常見問題

Firebase 控制台能匯出 Authentication 使用者嗎?

不能。使用者(Users)分頁只有搜尋框、新增使用者(Add user)、重新整理按鈕,以及一個唯一項目是密碼雜湊參數(Password hash parameters)的選單。要把使用者存成檔案,需要 Firebase CLI(firebase auth:export)、Admin SDK,或是在這個分頁加入「匯出」按鈕的瀏覽器擴充功能。

如何從 Firebase 取得所有使用者電子郵件的清單?

匯出使用者後保留電子郵件那一欄即可。在 Firexport 的免費匯出中,它是 identifier 欄,內容與控制台顯示的一致:電子郵件,或者以電話號碼登入的使用者的電話號碼。在 Admin SDK 指令碼中,從 listUsers 收集 user.email。

匯出的內容包含使用者的密碼嗎?

沒有任何方法能取得明文密碼,因為 Firebase 從不儲存明文密碼。firebase auth:export 包含密碼雜湊和鹽值,firebase auth:import 會用它們搬移使用者,讓密碼照常可用。Firexport 從不讀取雜湊,Admin SDK 則只在有額外權限時才會回傳它們。

如何把使用者搬到另一個 Firebase 專案?

在舊專案執行 firebase auth:export users.json,再在新專案執行 firebase auth:import users.json,並加上 --hash-algo=SCRYPT,以及舊專案密碼雜湊參數(Password hash parameters)中的雜湊金鑰、鹽值分隔符、輪數和記憶體成本。若使用不含雜湊的檔案(來自 Firexport 或指令碼),每位以密碼登入的使用者都得重設密碼。

可以在 Excel 或 Google 試算表中開啟匯出的檔案嗎?

可以。這裡的每種方法都會寫出 CSV,兩者都能開啟。Firexport 和指令碼產生的 CSV 都以位元組順序標記開頭,所以 Excel 能正確讀取任何語言的名稱。如果在沒有位元組順序標記的 CSV 中名稱變成亂碼,請透過資料 > 從文字/CSV(Data > From Text/CSV)匯入,並把檔案原點(File Origin)設為 65001: Unicode (UTF-8)。