Как предотвратить onAuthStateChanged от срабатывания при вызове createUserWithEmailAndPassword? [Дубликат]

Если вы не хотите устанавливать фиксированную ширину и не хотите дополнительного поля, добавьте display: inline-block к вашему элементу.

Вы можете использовать:

#element {
    display: table;
    margin: 0 auto;
}
31
задан Frank van Puffelen 3 June 2016 в 12:12
поделиться

9 ответов

Вот адаптация Swift 3 ответа Кабреры :

let bundle = Bundle.main
        let path = bundle.path(forResource: "GoogleService-Info", ofType: "plist")!
        let options = FIROptions.init(contentsOfFile: path)
        FIRApp.configure(withName: "Secondary", options: options!)
        let secondary_app = FIRApp.init(named: "Secondary")
        let second_auth = FIRAuth(app : secondary_app!)
        second_auth?.createUser(withEmail: self.username.text!, password: self.password.text!)
        {
            (user,error) in
            print(user!.email!)
            print(FIRAuth.auth()?.currentUser?.email ?? "default")
        }
59
ответ дан Community 3 September 2018 в 16:26
поделиться

Я получил очень умное обходное решение André , работающее в Objective-C с использованием SDK Firebase iOS:

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"];
FIROptions *secondaryAppOptions = [[FIROptions alloc] initWithContentsOfFile:plistPath];
[FIRApp configureWithName:@"Secondary" options:secondaryAppOptions];
FIRApp *secondaryApp = [FIRApp appNamed:@"Secondary"];
FIRAuth *secondaryAppAuth = [FIRAuth authWithApp:secondaryApp];

[secondaryAppAuth createUserWithEmail:user.email
                             password:user.password
                           completion:^(FIRUser * _Nullable user, NSError * _Nullable error) {
                                [secondaryAppAuth signOut:nil];
                          }];
3
ответ дан André Kool 3 September 2018 в 16:26
поделиться

Обновление для Swift 4

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

Оригинальный ответ Nico

Сначала сконфигурируйте firebase в файле AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    FirebaseApp.configure()
    FirebaseApp.configure(name: "CreatingUsersApp", options: FirebaseApp.app()!.options)

    return true
}

Добавьте следующий код в действие, в котором вы создаете учетные записи.

            if let secondaryApp = FirebaseApp.app(name: "CreatingUsersApp") {
                let secondaryAppAuth = Auth.auth(app: secondaryApp)

                // Create user in secondary app.
                secondaryAppAuth.createUser(withEmail: email, password: password) { (user, error) in
                    if error != nil {
                        print(error!)
                    } else {
                        //Print created users email.
                        print(user!.email!)

                        //Print current logged in users email.
                        print(Auth.auth().currentUser?.email ?? "default")

                        try! secondaryAppAuth.signOut()

                    }
                }
            }
        }
1
ответ дан BSlade 3 September 2018 в 16:26
поделиться

Если вы используете Polymer и Firebase (полимерный огонь), см. этот ответ: https://stackoverflow.com/a/46698801/1821603

По существу вы создаете вторичный <firebase-app> для обработки новой регистрации пользователя, не затрагивая текущего пользователя.

0
ответ дан Evan Caldwell 3 September 2018 в 16:26
поделиться

Обновление 20161108 - оригинальный ответ ниже

Firebase только что выпустила свой SDK firebase-admin, который позволяет использовать код на стороне сервера для этого и других распространенных административных прецедентов. Прочтите инструкции по установке , а затем погрузитесь в документацию по созданию пользователей .

исходный ответ

В настоящее время невозможно. Создание пользователя Email + Password автоматически подписывает нового пользователя.

15
ответ дан Frank van Puffelen 3 September 2018 в 16:26
поделиться

Версия Swift:

FIRApp.configure()

// Creating a second app to create user without logging in
FIRApp.configure(withName: "CreatingUsersApp", options: FIRApp.defaultApp()!.options)

if let secondaryApp = FIRApp(named: "CreatingUsersApp") {
    let secondaryAppAuth = FIRAuth(app: secondaryApp)
    secondaryAppAuth?.createUser(...)
}
0
ответ дан Nico 3 September 2018 в 16:26
поделиться

Я только что создал функцию Firebase, которая запускается при создании документа Firestore (с правилами для записи только администратору). Затем используйте admin.auth (). CreateUser (), чтобы создать нового пользователя правильно.

export const createUser = functions.firestore
.document('newUsers/{userId}')
.onCreate(async (snap, context) => {
    const userId = context.params.userId;
    const newUser = await admin.auth().createUser({
        disabled: false,
        displayName: snap.get('displayName'),
        email: snap.get('email'),
        password: snap.get('password'),
        phoneNumber: snap.get('phoneNumber')
    });
    // You can also store the new user in another collection with extra fields
    await admin.firestore().collection('users').doc(newUser.uid).set({
        uid: newUser.uid,
        email: newUser.email,
        name: newUser.displayName,
        phoneNumber: newUser.phoneNumber,
        otherfield: snap.get('otherfield'),
        anotherfield: snap.get('anotherfield')
    });
    // Delete the temp document
    return admin.firestore().collection('newUsers').doc(userId).delete();
});
0
ответ дан Paulo Busato Favarato 3 September 2018 в 16:26
поделиться

Я столкнулся с той же проблемой, и я решил это следующим образом:

Когда пользователь вводит логин, я сохраняю адрес электронной почты и пароль в общих настройках. И после создания пользователя я снова вхожу в систему с помощью электронной почты и пароля, которые я сохранил ранее.

    String currentEmail = MyApp.getSharedPreferences().getEmail();
    String currentPass = MyApp.getSharedPreferences().getPass();

    FirebaseAuth auth = FirebaseAuth.getInstance();
    auth.createUserWithEmailAndPassword(email, pass)
            .addOnCompleteListener(AddStudent.this, new OnCompleteListener<AuthResult>() {

                @Override
                public void onComplete(@NonNull final Task<AuthResult> task) {

                    if (task.isSuccessful()) {
                        String currentEmail = MyApp.getSharedPreferences().getEmail();
                        String currentPass = MyApp.getSharedPreferences().getPass();

                        //Sign in again
                        auth.signInWithEmailAndPassword(currentEmail, currentPass)
                                .addOnCompleteListener(AddStudent.this, new OnCompleteListener<AuthResult>() {
                                    @Override
                                    public void onComplete(@NonNull Task<AuthResult> task) {
                                        if (!task.isSuccessful()) {
                                            Log.e("RELOGIN", "FAILED");
                                        } else {
                                            Log.e("RELOGIN", "SUCCESS");
                                        }
                                    }
                                });

                        finish();
                    }
                }
    });
-2
ответ дан Sayed Hameed Ebrahim 3 September 2018 в 16:26
поделиться

У меня была аналогичная проблема, поэтому я задал вопрос в сообществе Firebase Slack. Я реализовал это и работает как шарм.

3
ответ дан srijanshukla 3 September 2018 в 16:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: