Tengo un código donde el usuario puede actualizar sus credenciales/información personal, sin embargo, encontré un problema y logré solucionarlo, decía que el primer argumento tenía que ser una cadena y encontré una solución, sin embargo, luego recibí un error que decía "Esta operación es confidencial y requiere autenticación reciente. Vuelva a iniciar sesión antes de volver a intentarlo...
Luego encontré en algunos de los comentarios donde encontré mi primera solución lo siguiente: user.reauthenticateWithCredential(auth.EmailAuthProvider.credential(user.email, user.password)).then(() => user.updateEmail(email)) Intenté usar esto, pero no funciona. Obtuve otro error después y quería saber si estaba desactualizado o si lo estaba haciendo mal.
Código
Obtengo mi autenticación de mi firebase.js
const db = firebase.firestore(); const auth = firebase.auth(); const storage = firebase.storage();Obtengo mi usuario de mi App.js y luego, si lo necesito, lo envío así:
function App() { const [user, setUser] = useState([]); useEffect(() => { auth.onAuthStateChanged((authUser) => { if (authUser) { setUser(authUser); } else { setUser(false); } }) }, []) return ( .... <Route path = "/Update_Profile"> <Inicio user={user}/> <UpdateProfile user={user}/> </Route> ... )} export default App; const updateEmail = (e) => { e.preventDefault(); if (user && (email != "")) { user.reauthenticateWithCredential(auth.EmailAuthProvider.credential(user.email, user.password)) .then(() => user.updateEmail(email)) const ref = db.collection("usuarios").doc(user.uid) ref.update({ email: email }) } else { //User is not logged in, handle that case here } }Debido a que auth es una instancia del módulo Auth y no el espacio de nombres del módulo Auth del SDK web de Firebase (porque usó const auth = firebase.auth() ), el siguiente valor no está undefined :
auth.EmailAuthProvider Esto se debe a que la clase firebase.auth.Auth no define una propiedad EmailAuthProvider . Esto significa que JavaScript intenta llamar a undefined.credential(...) y arroja un error.
Para acceder a la clase EmailAuthProvider , debe acceder directamente desde el espacio de nombres firebase.auth :
firebase.auth.EmailAuthProviderEn breve,
firebase.auth !== firebase.auth()