Как отключить запись в Firebase 3.x

Я создал некоторых пользователей, использующих firebase.auth(). signInWithEmailAndPassword и хотел бы остановить signUp сейчас, но продолжайте работать signIn. Я пробовал некоторые правила для пользователей и даже вообще не записывал запись в firebase. Однако регистрация по-прежнему возможна. Отключение электронной почты/пароля на консоли также запрещает вход в систему.

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

Любые идеи по применению правил безопасности для пользователей в Firebase 3?

Ответ 1

Firebase явно отделяет аутентификацию (вход в приложение) от авторизации (доступ к базам данных или ресурсам хранилища из приложения).

Вы не можете отключить регистрацию без отключения входа для всех пользователей, чего вы не хотите.

В типичном сценарии разработчик начнет обеспечивать доступ к базе данных/файла на основе аутентифицированного пользователя. См. Соответствующий раздел в документах для безопасность базы данных и безопасность хранилища.

Если ваш случай использования состоит в том, что вы хотите, чтобы определенные пользователи имели доступ, вы, вероятно, захотите реализовать белый список: список пользователей, которым разрешен доступ к данным.

Вы можете сделать это в своих правилах безопасности:

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

Или (лучше), поместив список разрешенных uid в вашу базу данных и ссылаясь на это из ваших правил безопасности:

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

И затем:

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

Ответ 2

Прошло несколько дней с тех пор, как вопрос был задан, но, возможно, это могло бы помочь тем, кто все еще интересуется ответом, мы все еще не можем просто отключить создание новой учетной записи, но мы можем сделать это с помощью функций Firebase:

Вот обходной путь для автоматического отключения новых пользователей с помощью облачных функций.

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

Помните, что эта функция запускается при создании пользователей с помощью веб-консоли Firebase или сторонних разработчиков. Таким образом, вы должны создать, дождаться функции, а затем включить пользователя.

Ответ 3

Если вы хотите удалить опцию регистрации из FirebaseUI в приложении Android, вам нужно добавить следующего провайдера:

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

и функция будет выглядеть следующим образом:

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