Open1

Firebase

Masayuki HigashinoMasayuki Higashino

Firebaseで自動生成する場合のuidやdocument idをJSON Schemaでvalidateする

  • 自動生成されるIDの仕様は見つからなかった。どこかに記述がないか調査中。
  • uidの生成コードは不明。
  • document idはfirebase-js-sdkに自動生成するコードがあった。
  • そもそも自動生成されるIDに仕様があったとしても変わる可能性がある(過去に変わったことがある。)ので、普通はvalidateしなくて良さそう。必要になるケースは限定的。(※諸事情で要るときは要る。)
  • uidのエミュレータのソースコードを見れば分かりそうだけどJARファイルのソースコードが公開されているか不明。
  • Firestoreのdocument idは、オフライン対応の都合でクライアント側でIDを生成しなければならないケースがあるので、これが見つかるのは想定していた。
  • uidは無さそうな気がするが…To be continued.
{
  "$defs": {
    "firebase-auth-user-id": {
      "type": "string",
      "pattern": "^[0-9a-zA-Z]{28}$"
    },
    "firebase-firestore-document-id": {
      "type": "string",
      "pattern": "^[0-9a-zA-Z]{20}$"
    },
}

References

Firebase User ID Allowed Characters - Stack Overflow

From my experience, the latest version of Firebase follows the ^[0-9a-zA-Z]{27}[0-9]$ pattern. I don't know why there's always a digit at the end, but that seems to be consistent. - Alix Axel,Oct 24 '17 at 11:38
Note: Recently I did get IDs that did NOT end with a digit. Also, the minus character is used in IDs - user3252141, May 23 '20 at 7:02

firebase-js-sdk/misc.ts at firebase@9.4.1 · firebase/firebase-js-sdk

(一部抜粋)

const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
[...]
const targetLength = 20;
[...]
debugAssert(autoId.length === targetLength, 'Invalid auto ID: ' + autoId);