Firebase kicks out current user

前端 未结 14 1801
一个人的身影
一个人的身影 2020-11-22 01:42

So I have this issue where every time I add a new user account, it kicks out the current user that is already signed in. I read the firebase api and it said that \"I

相关标签:
14条回答
  • 2020-11-22 02:08

    Update 20161108 - original answer below

    Firebase just released its firebase-admin SDK, which allows server-side code for this and other common administrative use-cases. Read the installation instructions and then dive into the documentation on creating users.

    original answer

    This is currently not possible. Creating an Email+Password user automatically signs that new user in.

    0 讨论(0)
  • 2020-11-22 02:08

    I got André's very clever workaround working in Objective-C using the Firebase iOS SDK:

    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];
                              }];
    
    0 讨论(0)
  • 2020-11-22 02:08

    If you are using Polymer and Firebase (polymerfire) see this answer: https://stackoverflow.com/a/46698801/1821603

    Essentially you create a secondary <firebase-app> to handle the new user registration without affecting the current user.

    0 讨论(0)
  • 2020-11-22 02:14

    On the web, this is due to unexpected behavior when you call createUserWithEmailAndPassword out of the registration context; e.g. inviting a new user to your app by creating a new user account.

    Seems like, createUserWithEmailAndPassword method triggers a new refresh token and user cookies are updated too. (This side-effect is not documented)

    Here is a workaround for Web SDK: After creating the new user;

    firebase.auth().updateCurrentUser (loggedInUser.current)
    

    provided that you initiate loggedInUser with the original user beforehand.

    0 讨论(0)
  • 2020-11-22 02:15

    The Swift version:

    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 讨论(0)
  • 2020-11-22 02:15

    I faced the same problem, and I solved it with this way:

    When the user login, I save the email and password in the shared preferences. And after creating the user, I login the user again with email and password that I have saved before.

        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();
                        }
                    }
        });
    
    0 讨论(0)
提交回复
热议问题