wake-up-neo.com

So deaktivieren Sie die Registrierung in Firebase 3.x

Ich habe einige Benutzer erstellt, die firebase.auth (). SignInWithEmailAndPassword verwenden, und ich möchte die Anmeldung jetzt beenden, aber signIn funktioniert weiter. Ich habe ein paar Regeln für Benutzer ausprobiert und sogar aufgehört, auf Firebase zu schreiben. Eine Registrierung war jedoch noch möglich. Durch das Deaktivieren von E-Mail/Passwort in der Konsole wird auch die Anmeldung deaktiviert.

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

Haben Sie Ideen, wie Sie Sicherheitsregeln auf Benutzer in Firebase 3 anwenden können?

12
ZimZim

Firebase trennt die Authentifizierung (Anmeldung bei der App) explizit von der Autorisierung (Zugriff auf Datenbank- oder Speicherressourcen über die App).

Sie können die Anmeldung nicht deaktivieren, ohne die Anmeldung für alle Benutzer zu deaktivieren, was Sie nicht möchten.

In einem typischen Szenario beginnt der Entwickler, den Datenbank-/Dateizugriff basierend auf dem authentifizierten Benutzer zu sichern. Siehe den entsprechenden Abschnitt in den Dokumenten für Datenbanksicherheit und Speichersicherheit .

Wenn Ihr Anwendungsfall darin besteht, dass nur bestimmte Benutzer Zugriff haben sollen, möchten Sie wahrscheinlich eine Whitelist implementieren: eine Liste von Benutzern, die auf die Daten zugreifen dürfen.

Das können Sie in Ihren Sicherheitsregeln tun:

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

Oder (besser), indem Sie die Liste der zulässigen UIDs in Ihre Datenbank aufnehmen und auf die in Ihren Sicherheitsregeln verweisen:

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

Und dann:

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

Nun, es ist schon Tage her, seit die Frage gestellt wurde, aber vielleicht kann dies für diejenigen hilfreich sein, die sich immer noch fragen, ob wir die neue Kontoerstellung immer noch nicht einfach deaktivieren können. Sie können jedoch Firebase-Funktionen verwenden:

Hier finden Sie die Problemumgehung für die automatische Deaktivierung neuer Benutzer mithilfe von Cloud-Funktionen.

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 ));
});

Denken Sie daran, dass diese Funktion ausgelöst wird, wenn Sie Benutzer mit der Firebase-Webkonsole oder von Drittanbietern erstellen. Sie müssen also erst erstellen, die Funktion abwarten und dann den Benutzer aktivieren.

2
Muhammad Ovi

Wenn Sie die Anmeldeoption von FirebaseUI in der Android-App entfernen möchten, müssen Sie den folgenden Anbieter hinzufügen:

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

und die Funktion sieht wie folgt aus:

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);
}