diff --git a/docs/auth/errors.md b/docs/auth/errors.md index 0f4154ada219..4d26cba6ea12 100644 --- a/docs/auth/errors.md +++ b/docs/auth/errors.md @@ -51,49 +51,41 @@ try { } on FirebaseAuthException catch (e) { if (e.code == 'account-exists-with-different-credential') { // The account already exists with a different credential - String email = e.email; - AuthCredential pendingCredential = e.credential; + String email = e.email!; + AuthCredential pendingCredential = e.credential!; - // Fetch a list of what sign-in methods exist for the conflicting user - List userSignInMethods = await auth.fetchSignInMethodsForEmail(email); + // Note: fetchSignInMethodsForEmail() is deprecated. + // Instead, attempt sign-in directly with known providers + // and handle the linking flow accordingly. - // If the user has several sign-in methods, - // the first method in the list will be the "recommended" method to use. - if (userSignInMethods.first == 'password') { - // Prompt the user to enter their password + // Try signing in with email/password if applicable + try { String password = '...'; - - // Sign the user in to their account with the password UserCredential userCredential = await auth.signInWithEmailAndPassword( email: email, password: password, ); - // Link the pending credential with the existing account - await userCredential.user.linkWithCredential(pendingCredential); - + await userCredential.user!.linkWithCredential(pendingCredential); // Success! Go back to your application flow return goToApplication(); + } on FirebaseAuthException catch (_) { + // Email/password sign-in failed, try another provider } - // Since other providers are now external, you must now sign the user in with another - // auth provider, such as Facebook. - if (userSignInMethods.first == 'facebook.com') { - // Create a new Facebook credential - String accessToken = await triggerFacebookAuthentication(); - var facebookAuthCredential = FacebookAuthProvider.credential(accessToken); + // Try signing in with Facebook if applicable + String accessToken = await triggerFacebookAuthentication(); + var facebookAuthCredential = + FacebookAuthProvider.credential(accessToken); - // Sign the user in with the credential - UserCredential userCredential = await auth.signInWithCredential(facebookAuthCredential); - - // Link the pending credential with the existing account - await userCredential.user.linkWithCredential(pendingCredential); + UserCredential userCredential = + await auth.signInWithCredential(facebookAuthCredential); - // Success! Go back to your application flow - return goToApplication(); - } + // Link the pending credential with the existing account + await userCredential.user!.linkWithCredential(pendingCredential); - // Handle other OAuth providers... + // Success! Go back to your application flow + return goToApplication(); } } ``` @@ -105,3 +97,5 @@ to be linked or your **Identity Platform** project configuration must be adjuste See [Phone Authentication — iOS: reCAPTCHA SDK and Identity Platform](/docs/auth/phone-auth#ios-recaptcha-sdk-and-identity-platform) for recommended setup, the Safari flow, and a documented **GCP / Identity Toolkit** workaround with trade-offs. + +