sesion reglas password example create cerrar firebase firebase-database firebase-authentication

reglas - firebase reset password



¿Cómo crear un usuario en Firebase solo si los campos de la base de datos son válidos? (2)

La solución parece bastante sucia y poco elegante para mí también. Lo que me propongo hacer es no seguir el método de reglas para validar el nombre de usuario. Porque, como señaló, no tiene forma de saber cuándo falla la validación.

En su lugar, te sugiero que escribas una función de activación de base de datos en tu implementación de Cloud Functions. Esta función debe activarse cuando el nodo "nombre de usuario" está lleno. En esto, puede validar el nombre de usuario para asegurarse de que cumpla con los criterios que haya establecido. Si la validación es exitosa, su aplicación cliente podría indicarlo al usuario y continuar.

Si la validación no tiene éxito, puede solicitar al usuario que ingrese otro nombre de usuario. Incluso podría mostrar una barra de progreso o algo similar en el cliente mientras se lleva a cabo el proceso de validación.

Sin embargo, me gustaría añadir que esta podría ser una de las formas en que esto se puede resolver y no es necesariamente la mejor manera. Aunque no puedo pensar en una mejor manera, estoy totalmente dispuesto a explorar un método diferente si surge algo más.

Después de leer muchos artículos sobre campos de datos de usuario adicionales (en mi caso es solo nombre de usuario único) en el ecosistema de Firebase, me acerqué a la mejor (espero) variante de guardar y validar el nombre de usuario: use el nombre de usuario como clave de nodo en /users/ .

Estoy validando nombre de usuario en el lado del cliente y dentro de las reglas de la base de datos: ": "$user.matches(/^[0-9A-Z]{3,18}$/i)&& newData.hasChildren([''uid'']) && !data.parent().hasChild($user)",

Tengo problemas al iniciar la sesión del usuario. En mi método SignUp createUserWithEmailAndPassword nombre de usuario en la base de datos con el método createUserWithEmailAndPassword resolve createUserWithEmailAndPassword de createUserWithEmailAndPassword , aquí hay un fragmento de código:

... .createUserWithEmailAndPassword(payload.email, payload.password) .then((user) => { // saving additional user information firebase .database() .ref(`users/${payload.username}`) .set({ uid: user.uid, }) .then(() => { ...

Las validaciones del lado del cliente son buenas, pero obviamente no son suficientes. Mi aplicación funciona bien, pero si deshabilitamos la validación del lado del cliente del nombre de usuario e intentamos enviar un nombre de usuario no válido, el usuario se creará sin nombre de usuario.

La única solución que veo es crear primero un nodo de nombre de usuario, si la creación fue exitosa, intente iniciar sesión, si el .catch no arroja ningún error, continúe la ejecución del programa, de lo contrario, en el bloque .catch simplemente elimine el nodo creado con el nombre de usuario. Pero parece una solución muy sucia para mí.

¿Cómo puedo resolver este problema de manera elegante? ¡Gracias!


Si desea asegurarse de que haya guardado los campos obligatorios en la base de datos, así como ningún otro campo "desconocido", puede usar la regla .validate. Agregue esto a su database.rules.json (o directamente en las reglas de la base de datos en la consola):

"users": { "$uid": { "email": { ".validate": true }, "displayName": { ".validate": true }, "$other": { ".validate": false }, ".read": "$uid === auth.uid", ".write": "$uid === auth.uid" } }

Además, observe la forma recomendada de almacenar un usuario en la base de datos en tiempo real, utilizando su UID como la clave. Entonces su ruta de usuario se verá así:

/users/9gZepE9jODX1KZGZ2EEyoX1NyOX4