Estoy tratando de crear una aplicación web, donde puede iniciar sesión y registrar una cuenta con una cuenta de Google. Me las arreglé para que puedan iniciar sesión con signInWithPopup (proveedor), pero no estoy seguro de cómo implementar el registro. ¿Alguna sugerencia? ¿O conoce alguna función en Firebase que pueda usar?
No hay métodos separados para login y sign up cuando se utiliza Google Sign-In o cualquier otro proveedor. Si existe un usuario con esa credencial, el usuario iniciará sesión; de lo contrario, se creará una nueva cuenta de usuario. Luego puede usar additionalUserInfo.isNewUser propiedad AdditionalUserInfo.isNewUser del resultado recibido del método signInWithPopUp para verificar si el usuario es nuevo.
firebase.auth().signInWithPopup(provider).then(function (result) { const {additionalUserInfo: {isNewUser}} = result; console.log(isNewUser ? "This user just registered" : "Existing User") }) Para el nuevo Modular SDK ( V9.0.0+ ), lo mismo se puede escribir como:
import { signInWithPopup, getAdditionalUserInfo } from "firebase/auth" const result = await signInWithPopup(auth, googleProvider); // Pass the UserCredential const { isNewUser } = getAdditionalUserInfo(result)Hasta ahora, según entendí, tiene dos opciones para iniciar sesión en su sitio web: una es crear una cuenta de nombre de usuario/contraseña local en su sitio web y la otra opción es usar su cuenta de Google. Supongo que la mejor manera sería verificar si la cuenta de Google está vinculada a cualquier usuario existente usando additionalUserInfo.isNewUser y luego vincular su cuenta de Google con la cuenta que se crea localmente a través de su sitio web siguiendo este artículo:https:// firebase.google.com/docs/auth/web/account-linking?hl=lt
Una vez que tenga la dependencia de Firebase dentro de su aplicación. Puede usar el método createUserWithEmailAndPassword para hacerlo.
firebase .auth() .createUserWithEmailAndPassword("email@domain.com", "123123") .then(data => { data.user.updateProfile({ displayName: this.form.name }).then(() => {}); }) .catch(err => { this.error = err.message; });