Firebaseの新規ユーザ登録を禁止する


1.まとめ

  • Firebase Authenticationのログイン機能(EmailAuth)で、signInOptionsのパラメータにdisableSignUpを使えば、UI画面からの新規ユーザの登録を制限できる。

2.問題

  • Firebaseはウェブアプリ作るのに便利で使わせてもらっているが、デフォルトのログイン機能を実装すると、そのままだとログイン画面で勝手に新規ユーザ登録がされてログインされてしまう。SNS等はこれで便利だが、ちょっとクローズなサイトなどは勝手に入ってきてもらうと困る。





ログイン成功!!!




*一方、上記の設定ファイルではAPI経由での登録は制限できないようなので、別途対策が必要とのこと。

Note that this flag will only disable sign up from the UI and will not prevent sign up via REST API. It is highly recommended that Identity Platform projects enforce this policy via one of these 2 mechanisms:
*Blocking functions: Set a beforeCreate trigger to disable sign up for email providers.
*In the Cloud Console / Settings / USERS tab, uncheck Enable create (sign-up) checkbox. Though for this setting, sign up for all providers will be disabled.

2.具体的な書き方
ここに「signInOptionsに追加して」、と書いてあるのだが、どう書けばいいのかわからずに困った。
結局、下記のようにsignInOptionsを書けばいいのだと判明したので参考でメモ。
disableSignUp: {status:true} ⇒がミソ

//4.8.0が必要とのこと
    <script src="https://www.gstatic.com/firebasejs/ui/4.8.0/firebase-ui-auth.js"></script>
    <link type="text/css" rel="stylesheet" href="https://www.gstatic.com/firebasejs/ui/4.8.0/firebase-ui-auth.css" />

//・・・略・・・

var uiConfig = {
      callbacks: {
        signInSuccessWithAuthResult: function(authResult, redirectUrl) {
        return true;
        },
        uiShown: function() {
        // The widget is rendered.
        // Hide the loader.
        document.getElementById('loader').style.display = 'none';
        }
      },
    signInFlow: 'popup',
    signInSuccessUrl: 'success.html',
    signInOptions: [{
      provider:firebase.auth.EmailAuthProvider.PROVIDER_ID,
      disableSignUp: {status:true}
    }
    ],
    // Terms of service url.
    tosUrl: 'terms-of-services.html',
    // Privacy policy url.
    privacyPolicyUrl: 'privacy-pocily.html'

};


      var ui = new firebaseui.auth.AuthUI(firebase.auth());
      ui.start('#firebaseui-auth-container', uiConfig);

//・・・以下略・・・

設定を反映させるのに
disableSignUp.status(true)
とか
disableSignUp.status=true
とか色々試してだめだった結果、2〜3時間かかってしまった。