Есть ли способ остановить автоматический вход в систему после регистрации в Firebase + AngularJS? [Дубликат]

Вы можете использовать весь URL, но если вы просто хотите сократить идентификатор, сделайте так, как предположил Марсель. Я написал эту реализацию python:

https://gist.github.com/778542

33
задан Frank van Puffelen 3 June 2016 в 12:12
поделиться

14 ответов

Вот адаптация 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")
        }
58
ответ дан Community 18 August 2018 в 16:14
поделиться
  • 1
    Крутой обход! – Frank van Puffelen 24 June 2016 в 14:46
  • 2
    Я копаю это. Тем не менее, не все еще не аутентифицирует учетную запись secondaryApp (или mainAppAccount), которая предотвратит создание другого пользователя без повторной аутентификации? – Jay 24 June 2016 в 15:11
  • 3
    @FrankvanPuffelen Хорошо закрыл рот. Это правильно (конечно). Что затем приводит к вопросу; зачем делать изменения, которые были сделаны для начала? Kinda кажется интуитивно понятным для того, чтобы отключить учетную запись auth'd, которая создает пользователя, когда кто-либо может создавать учетные записи. Weird. В любом случае, это ответ BRILLIANT . – Jay 24 June 2016 в 19:39
  • 4
    Это очень помогло мне, спасибо !. Добавим, что мне пришлось добавить 'secondaryApp.delete ();' чтобы остановить firebase от того, чтобы сказать мне, что есть еще одно приложение, зарегистрированное во всем мире. – Jimmy 2 July 2016 в 02:49
  • 5
    @ AndréKool: мы только что выпустили SDK firebase-admin, который делает ненужным использовать ваш (по общему признанию умный) обходной путь. См. мой обновленный ответ ниже . – Frank van Puffelen 8 November 2016 в 12:56
59
ответ дан Community 7 September 2018 в 01:24
поделиться
61
ответ дан Community 30 October 2018 в 05:43
поделиться

Я получил очень умное обходное решение 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 18 August 2018 в 16:14
поделиться

Обновление для 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 18 August 2018 в 16:14
поделиться

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

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

0
ответ дан Evan Caldwell 18 August 2018 в 16:14
поделиться

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

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

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

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

15
ответ дан Frank van Puffelen 18 August 2018 в 16:14
поделиться
  • 1
    Frank, Итак, я должен использовать SDK Firebase admin в моем приложении AngularJS, если я хочу создавать пользователей, не подписывая их? – Zaid Mirza 8 November 2016 в 13:46
  • 2
    SDK Firebase Admin node.js должен запускаться только в доверенной среде. Создание пользователя без его подписания считается административной задачей. – Frank van Puffelen 8 November 2016 в 14:05
  • 3
    @FrankvanPuffelen Я хочу, чтобы пользователь мобильного приложения мог пригласить пользователя, который использует createUserWithEmailAndPassword и отправляет электронное письмо пользователю. Я не хочу использовать SDK firebase-admin в клиентском / мобильном приложении. Каковы мои другие варианты? – alltej 19 September 2017 в 21:33
  • 4
    Итак, я просто потратил несколько часов на изучение Node.js, настроил службу для обработки данных Post из новой пользовательской формы из проекта angular2, вошедший в систему пользователь не загрузился :). Теперь реализовать удаление и обновление. – Ivan 24 October 2017 в 22:16

Версия 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 18 August 2018 в 16:14
поделиться

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

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

    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 18 August 2018 в 16:14
поделиться
  • 1
    Дорогой бог, это ужасные практики. Пожалуйста, никогда не храните учетные данные пользователя локально! – Jono Rogers 2 December 2016 в 15:42

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

3
ответ дан srijanshukla 18 August 2018 в 16:14
поделиться
  • 1
    это все еще работает? когда я пытаюсь получить 400 запросов – athosbr99 10 November 2016 в 01:23
  • 2
    @ athosbr99 Эй, я только что проверил его снова. Работает. – srijanshukla 2 January 2017 в 09:13
  • 3
    Это может сломаться очень легко .. – Chrillewoodz 7 March 2017 в 13:53
  • 4
    @Chrillewoodz вы можете сказать почему? – srijanshukla 7 March 2017 в 14:08
  • 5
    Все, что им нужно сделать, это изменить путь, и ваш код сломается. Если вы используете SDK, это намного надежнее, потому что им необходимо обновить SDK, а также обновить версию SDK. – Chrillewoodz 7 March 2017 в 15:02
0
ответ дан fkvestak 7 September 2018 в 01:24
поделиться
0
ответ дан Paulo Busato Favarato 7 September 2018 в 01:24
поделиться
0
ответ дан Paulo Busato Favarato 30 October 2018 в 05:43
поделиться
0
ответ дан fkvestak 30 October 2018 в 05:43
поделиться
Другие вопросы по тегам:

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