Firebase Allowing Multiple Accounts from Same Email Address

前端 未结 3 1297
暖寄归人
暖寄归人 2021-02-07 06:01

Within the Firebase console I have specifically set it to only allow \"One account per email address\". This is found on the sign-in method tab under \"advanced\".

I

3条回答
  •  被撕碎了的回忆
    2021-02-07 06:29

    Expanding Kathir's answer, Firebase documentation does provide solution.

    The following are code snippets copied from the documentation.

    // Step 1.
    // User tries to sign in to Google.
    auth.signInWithPopup(new firebase.auth.GoogleAuthProvider()).catch(function(error) {
      // An error happened.
      if (error.code === 'auth/account-exists-with-different-credential') {
        // Step 2.
        // User's email already exists.
        // The pending Google credential.
        var pendingCred = error.credential;
    
        // The provider account's email address.
        var email = error.email;
    
        // Get sign-in methods for this email.
        auth.fetchSignInMethodsForEmail(email).then(function(methods) {
    
          // Step 3.
          // If the user has several sign-in methods,
          // the first method in the list will be the "recommended" method to use.
          if (methods[0] === 'password') {
    
            // Asks the user their password.
            // In real scenario, you should handle this asynchronously.
            var password = promptUserForPassword(); // TODO: implement promptUserForPassword.
    
            auth.signInWithEmailAndPassword(email, password).then(function(user) {
              // Step 4a.
              return user.linkWithCredential(pendingCred);
            }).then(function() {
              // Google account successfully linked to the existing Firebase user.
              goToApp();
            });
            return;
          }
    
          // All the other cases are external providers.
          // Construct provider object for that provider.
          // TODO: implement getProviderForProviderId.
          var provider = getProviderForProviderId(methods[0]);
    
          // At this point, you should let the user know that he already has an account
          // but with a different provider, and let him validate the fact he wants to
          // sign in with this provider.
          // Sign in to provider. Note: browsers usually block popup triggered asynchronously,
          // so in real scenario you should ask the user to click on a "continue" button
          // that will trigger the signInWithPopup.
          auth.signInWithPopup(provider).then(function(result) {
            // Remember that the user may have signed in with an account that has a different email
            // address than the first one. This can happen as Firebase doesn't control the provider's
            // sign in flow and the user is free to login using whichever account he owns.
            // Step 4b.
            // Link to Google credential.
            // As we have access to the pending credential, we can directly call the link method.
            result.user.linkAndRetrieveDataWithCredential(pendingCred).then(function(usercred) {
              // Google account successfully linked to the existing Firebase user.
              goToApp();
            });
          });
        });
      }
    });
    

提交回复
热议问题