Soy nuevo en la autenticación de base de fuego. Estoy creando una aplicación nativa de reacción. Estoy usando createUserWithEmailAndPassword para registrar un nuevo usuario. Adjunté un controlador de eventos para manejar el envío del formulario que activa la función onRegister. Deseo hacer uso del objeto de promesa que se devuelve de createUserWithEmailAnPassword.
Al intentar depurar usando Chrome, el depurador no se mueve al bloque de prueba (la contraseña tiene más de 6 dígitos y el correo electrónico también es válido). La aplicación se congela. El registro de la consola que he escrito en el bloque de prueba tampoco se imprime. Pero, en mi consola Firebase, se crea un nuevo usuario.
Si paso una contraseña no válida, se activa el código dentro del bloque catch. La aplicación no se congela.
¿Cómo evitar que la aplicación se congele y hacer uso del objeto devuelto por createUserWithEmailAndPassword?
export default function Register(props) { let state = { email: "", password: "", name: "", }; async function onRegister() { const { email, password, name } = state; try { const res = await createUserWithEmailAndPassword(auth, email, password); const user = res.user; console.log(user); } catch (err) { console.error(err); alert(err.message); } } return ( <View> <TextInput placeholder="name" onChangeText={(name) => (state.name = name)} /> <TextInput placeholder="email" onChangeText={(email) => (state.email = email)} /> <TextInput placeholder="password" secureTextEntry={true} onChangeText={(password) => (state.password = password)} /> <Button onPress={() => onRegister()} title="Sign Up" />more tmore </View> ); }esto funcionó para mí
import auth from '@react-native-firebase/auth'; export default class App extends React.Component{ constructor(props){ super(props); this.onSignUpPressed = this.onSignUpPressed.bind(this); this.state = { email: '', password: '', passwordError: '', emailError: '', secureTextEntry: true, } } emailValidator = (email) => { const re = /\S+@\S+\.\S+/; if (!email || email.length <= 0) return 'Email cannot be empty.'; if (!re.test(email)) return 'Ooops! We need a valid email address.'; return ''; }; passwordValidator = (password) => { if (!password || password.length <= 0) return 'Password cannot be empty.'; return ''; }; async onSignUpPressed(){ const emailError = this.emailValidator(this.state.email); const passwordError = this.passwordValidator(this.state.password); if (emailError || passwordError) { this.setState({ emailError: emailError, passwordError: passwordError }) return; } const {email, password} = this.state; await auth().createUserWithEmailAndPassword(email, password) .then((userCredential) => { // Signed in var user = userCredential.user; console.log(user) }) .catch((error) => { var errorCode = error.code; var errorMessage = error.message; console.log(errorMessage) }); }; render(){ const {email, password, passwordError, emailError, secureTextEntry} = this.state; return( <View> <TextInput placeholder="Email" value={email} error={!!emailError} errorText={emailError} placeholderTextColor="#666666" onChangeText={(email) => this.setState({email})} /> <TextInput placeholder="Password" placeholderTextColor="#666666" error={!!passwordError} errorText={passwordError} value={password.value} secureTextEntry={secureTextEntry ? true : false} onChangeText={(password) => this.setState({password})} /> <Button onPress={this.onSignUpPressed} title='SignUp'/> </View> )} }