web-dev-qa-db-ja.com

Firebaseへの登録を制限する方法はありますか

新しいユーザーがサインアップできないように、ユーザーがFirebaseのメール/パスワードアカウントを登録するのを制限する方法はありますか?数人の管理者だけがアクセスできる小さなアプリ(Firebase管理者で手動で作成したもの)があり、現在のセットアップ方法では、誰でも小さなJavaScriptを挿入してアカウントを登録できるようです。

20
binaryorganic

Firebase Simple Loginは、便宜上、 Firebase Custom Login の上に構築された抽象化です。電子メール/パスワード認証を使用する場合、これは単にその電子メールとパスワードの間のマッピングを作成し、セキュリティルールで使用するための認証トークンを自動的に生成することを覚えておく価値があります。

特定のケースでは、すべての「admin」ユーザーがすでに作成されている場合、セキュリティルールを通じて目的の動作を実現できます。たとえば、Firebaseデータツリーへの読み取り/書き込みアクセスをそのリスト内の認証済みユーザーにのみ許可する場合は、そのユーザーが「管理者」リストに含まれていることを要求するトップレベルの読み取り/書き込みセキュリティルールを作成してみてください。

_{
  ".read"  : "auth != null && root.child('admins').hasChild(auth.uid)",
  ".write" : "auth != null && root.child('admins').hasChild(auth.uid)"
}
_

上記のルールにより、ユーザーは(_auth != null_を介して)認証され、認証されたユーザーのIDが管理者のリスト(root.child('admins').hasChild(auth.uid))に含まれている必要があります。

最後のステップは、ユーザーをadminsサブツリーに書き込むことにより、実際にそれらのユーザーを管理者にすることです。管理者を作成するユーザー1、4、および7がいるとしましょう。データツリーを更新して、以下を反映させます。

_{
  ...
  "admins": {
    "1": true,
    "4": true,
    "7": true
  }
}
_

この結果、他のユーザーがFirebase Simple Loginを使用して新しいメール/パスワードのマッピングを生成できる場合でも、セキュリティルールを使用して制限されているため、これらのマッピングはアプリケーションに影響を与えません。

36
Rob DiMarco

@RobDiMarcoは素晴らしい答えを提供しましたが、欠点があります。

_auth.uid_が空の文字列になる場合、ルールroot.child('admins').hasChild(auth.uid)は渡されます。

これはFirebaseDatabase Security Simulatorでテストでき、uidフィールド(_{ "provider": "anonymous", "uid": ""}_)をクリアします。

Simulation results

このルールroot.child('admins').child(auth.uid).val() === trueは、空のuidでは渡されません。

11
ioi0

登録時に新規ユーザーを削除するクラウド機能を追加することで、新規ユーザー登録をオフにすることもできます。この答えを参照してください:

Firebaseでの新規ユーザー登録を防ぐ方法は?

0
zavtra