Estoy usando React Native/Firebase/Redux para crear un sistema de inicio de sesión simple. Estoy tratando de averiguar cómo capturar errores que ocurren como resultado de intentos fallidos de inicio de sesión.
Aquí está mi authscreen.js:
const [alertShowing, setAlertShowing] = useState(false); const [alertMessage, setAlertMessage] = useState(''); ... function handleLogin() { const response = dispatch(login(email, password)); console.log(response); }acciones.js:
export const login = (email, password) => { return async (dispatch) => { try { const response = await Firebase.auth().signInWithEmailAndPassword(email, password); dispatch(getUser(response.user.uid)); } catch (e) { return e; } }; };Mi console.log (respuesta) arriba muestra correctamente el mensaje de error, pero esto obviamente no es muy útil para los usuarios. Y tenga en cuenta también que puedo iniciar sesión correctamente cuando uso las credenciales correctas.
Lo que realmente quiero hacer en mi handleLogin() es verificar si la respuesta es un error y, de ser así, setlAlertShowing(true) y setAlertMessage en lo que obtuve del enlace useDispatch para que pueda mostrarlo bien al usuario.
¿Cómo debo hacer esto? TIA.
Los mensajes de error de Firebase están diseñados para desarrolladores y no son fáciles de usar para los usuarios estándar. La solución es identificar el código de error de autenticación y mapear con mensajes fáciles de usar.
lista de código de error https://firebase.google.com/docs/auth/admin/errors
Puede usar una función como esta para asignar authError a mensajes de error significativos.
function mapAuthCodeToMessage(authCode) { switch (authCode) { case "auth/invalid-password": return "Password provided is not corrected"; case "auth/invalid-email": return "Email provided is invalid"; // Many more authCode mapping here... default: return ""; } }y usarlo más tarde
export const login = (email, password) => { return async (dispatch) => { try { const response = await Firebase.auth().signInWithEmailAndPassword(email, password); dispatch(getUser(response.user.uid)); } catch (e) { dispatch({type:"authError",message:mapAuthCodeToMessage(e.code)})); } }; };