con - Cómo vincular correctamente diferentes cuentas de autenticación en Firebase IOS
firebase cloud messaging ios (1)
Fondo:
Estoy desarrollando una aplicación IOS usando firebase como back-end. Hay 3 autenticaciones: 1: contraseña y correo electrónico 2: FaceBook 3: Google
He marcado la opción "un correo electrónico por cuenta".
La situación es:
Digamos si primero me registro con uno de los proveedores de Auth y luego cierro la sesión y quiero registrarme con cualquiera de los otros proveedores de Auth. Obtendré un error de "la dirección de correo electrónico se ha utilizado" si el correo electrónico asociado del proveedor actual es el mismo que el anterior. En este caso, quiero vincular la cuenta de autenticación actual con la cuenta anterior.
Entiendo que debo llamar al linkWithCredential:completion:
para vincular las cuentas. Pero primero debo iniciar sesión en la cuenta anterior, pero ¿cómo puedo decir a qué cuenta debo iniciar sesión? Por ejemplo, si inicio sesión en Facebook y obtengo el error "mismo correo electrónico que se está utilizando", ¿cómo sé si debo iniciar sesión a través de Google o el correo electrónico / contraseña?
Una cosa interesante es Si uso Facebook o el correo electrónico / contraseña para iniciar sesión primero y luego iniciar sesión con Google, firebase manejará automáticamente los enlaces, pero el comportamiento predeterminado es sobrescribir el proveedor de autenticación anterior con Google y mantener el UID ...
He encontrado una publicación útil Cómo administrar la autenticación diferente de los usuarios en firebase
Pero solo se trata de una situación más simple donde la autenticación es solo dos.
Cuando recibe la credencial ya existe el error, ya tiene el correo electrónico en ese punto, luego llama a fetchProvidersForEmail
con ese correo electrónico que buscará los identificadores de proveedor asociados con ese correo electrónico. A continuación, inicia sesión en el usuario con uno de esos proveedores. Después de que termine de linkWithCredential:completion:
sesión con la cuenta existente, llame a linkWithCredential:completion:
con la credencial original que provocó el error. Esto hace que las cuentas se vinculen. La próxima vez que el usuario intente iniciar sesión, podrá iniciar sesión en el mismo usuario con cualquiera de los proveedores.
Verifique FirebaseUI-iOS, que ya se encarga de todo el flujo por usted. También puede verificar el código fuente para ver cómo manejan dichas situaciones: https://github.com/firebase/FirebaseUI-iOS