web-dev-qa-db-fra.com

Comment désactiver l'inscription dans Firebase 3.x

J'ai créé des utilisateurs à l'aide de firebase.auth (). SignInWithEmailAndPassword et je voudrais arrêter maintenant de vous connecter, mais maintenez votre connexion active. J'ai essayé quelques règles sur les utilisateurs et même d'arrêter d'écrire sur firebase. Cependant, l'enregistrement était toujours possible. Désactiver Email/Mot de passe dans la console désactive également la connexion.

{
  "rules": {
        ".read": true,
        ".write": false,
      }
}

Des idées sur l'application des règles de sécurité aux utilisateurs de Firebase 3?

12
ZimZim

Firebase sépare explicitement l’authentification (connexion à l’application) de l’autorisation (accès aux ressources de la base de données ou du stockage depuis l’application).

Vous ne pouvez pas désactiver l'inscription sans désactiver la connexion pour tous les utilisateurs, ce qui n'est pas ce que vous voulez.

Dans un scénario typique, le développeur commence à sécuriser l'accès à la base de données/aux fichiers en fonction de l'utilisateur authentifié. Reportez-vous à la section correspondante de la documentation pour sécurité de la base de données et sécurité du stockage .

Si votre cas d'utilisation est que vous souhaitez uniquement que des utilisateurs spécifiques aient accès, vous souhaiterez probablement implémenter une liste blanche: une liste des utilisateurs autorisés à accéder aux données.

Vous pouvez le faire dans vos règles de sécurité:

{
  "rules": {
        ".read": "auth.uid == '123abc' || auth.uid == 'def456'",
        ".write": false,
      }
}

Ou (mieux) en mettant la liste des UID autorisés dans votre base de données et en vous référant à celle-ci à partir de vos règles de sécurité:

"allowedUids": {
    "123abc": true,
    "def456": true
}

Et alors:

{
  "rules": {
        ".read": "root.child('allowedUids').child(auth.uid).exists()",
        ".write": false,
      }
}
26
Frank van Puffelen

Cela fait des jours que la question a été posée, mais peut-être que cela pourrait aider ceux qui se demandent encore une réponse, nous ne pouvons toujours pas désactiver la création du nouveau compte, mais nous pouvons utiliser les fonctions de Firebase:

Voici la solution de contournement pour désactiver automatiquement les nouveaux utilisateurs à l'aide des fonctions de cloud.

const admin = require("firebase-admin");

exports.blockSignup = functions.auth.user().onCreate(event => {
  return admin.auth().updateUser(event.uid, { disabled: true })
    .then(userRecord => console.log( "Auto blocked user", userRecord.toJSON() ))
    .catch(error => console.log( "Error auto blocking:", error ));
});

Rappelez-vous que cette fonction est activée lorsque vous créez des utilisateurs à l'aide de la console Web Firebase ou par des tiers. Vous devez donc créer, attendre la fonction, puis l'activer.

2
Muhammad Ovi

Si vous souhaitez supprimer l'option d'inscription de FirebaseUI dans l'application Android, vous devez ajouter le fournisseur suivant:

new AuthUI.IdpConfig.EmailBuilder().setAllowNewAccounts(false).build());

et la fonction ressemblera à ceci:

private void FireBaseLoginUI() {
        List<AuthUI.IdpConfig> providers = Arrays.asList(
                new AuthUI.IdpConfig.EmailBuilder().build(),
                new AuthUI.IdpConfig.EmailBuilder().setAllowNewAccounts(false).build());

        startActivityForResult(
                AuthUI.getInstance()
                        .createSignInIntentBuilder()
                        .setAvailableProviders(providers)
                        .setLogo(R.drawable.app_logo)
                        .setTheme(R.style.AuthUITheme)
                        .build(),
                RC_SIGN_IN);
}