Buscar..


Cómo guardar datos de perfil de usuario

Cada usuario autenticado tiene un uid Firebase que es único en todos los proveedores y se devuelve en el resultado de cada método de autenticación.

Una buena manera de almacenar los datos de su usuario es crear un nodo para mantener todos los datos de los usuarios y protegerlos utilizando sus reglas de seguridad.

- Base de datos

{
   "users": {
      "uid1" : {
         "name": "Steve",
         "surname": "Jobs"
      },
      "uid2" : {
         "name": "Bill",
         "surname": "Gates"
      }
   }
}

- seguridad

{
    "rules": {
        "users": {
            "$uid": {
                // If node's key matches the id of the auth user
                ".write": "$uid == auth.uid"
            }
        }
    }
}

El $uid en las reglas anteriores es una llamada "variable dólar", que garantiza que las reglas bajo este se apliquen a todos los nodos secundarios de users . Para obtener más información, consulte la documentación sobre el uso de $ Variables para capturar segmentos de ruta .

¿Por qué guardar datos de usuario en la base de datos?

La autenticación Firebase permite a los usuarios de su aplicación iniciar sesión con proveedores sociales o con su correo electrónico + contraseña. ¿Pero qué sucede si desea almacenar información adicional sobre un usuario, más allá de lo que la autenticación Firebase le permite especificar?

¿O qué sucede si desea mostrar una lista de los usuarios en su aplicación? Firebase Authentication no tiene una API para esto.

La mayoría de los desarrolladores resuelven este problema almacenando la información adicional en una base de datos separada. Este tema trata sobre cómo almacenar dicha información en la base de datos en tiempo real de Firebase .

Manejo de datos de cuenta de usuario en la base de datos en tiempo real

El sistema de autenticación Firebase es la fuente de un usuario uid , displayName , photoURL y tal vez email . Las cuentas basadas en contraseñas establecen estos valores persistentes en el sistema de autenticación a través del método .updateProfile . Al almacenar estos valores en la base de datos en tiempo real, rDB, el nodo de users plantea el problema de los datos obsoletos. Los nombres para mostrar, por ejemplo, pueden cambiar. Para mantener estos valores sincronizados, use el almacenamiento local en concierto con .onAuthStateChange .

en cada .onAuthStateChange

  • getItem('displayName') y getItem('photoURL')
  • comparar con user.displayName y user.photoURL
  • si es diferente
    • setItem('displayName') y setItem('photoURL')
    • db.ref.child('users').update los valores de displayName y / o photoURL

.onAuthStateChange en cada carga o recarga de la página, así como en cada cambio de estado de autenticación. Potencialmente se dispara a menudo, por ejemplo, aplicaciones de varias páginas. Sin embargo, leer y escribir en el almacenamiento local es sincrónico y muy rápido, por lo que no habrá un impacto notable en el rendimiento de la aplicación.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow