database design - realtime - Firebase: configuración de propiedades de usuario adicionales
node js firebase realtime database (2)
Me gustaría agregar una propiedad a un objeto de usuario de Firebase. La documentación del usuario dice que solo puedo almacenar propiedades adicionales usando la base de datos en tiempo real de Firebase.
No estoy seguro de cómo funciona esto en la práctica.
¿Qué significa lo siguiente en la práctica?
No puede agregar otras propiedades al objeto Usuario de Firebase directamente; en su lugar, puede almacenar las propiedades adicionales en su base de datos en tiempo real de Firebase.
Lo interpreto de la siguiente manera:
"no puede modificar las propiedades de un objeto FIRUser pero puede combinar esto con objetos adicionales"
Encontré la documentation función establecida que interpreto de esta manera:
var userRef = ref.child("users");
userRef.set({
newfield: "value"
});
¿Es este un enfoque sensato?
De acuerdo con la documentación de reclamos personalizados ,
Firebase Admin SDK admite la definición de atributos personalizados en las cuentas de usuario. [...] Los roles de usuario se pueden definir para los siguientes casos comunes:
- Agregar un identificador adicional en un usuario. Por ejemplo, un usuario de Firebase podría asignar a un UID diferente en otro sistema.
[...] La carga de reclamos personalizados no debe exceder los 1000 bytes.
Sin embargo, haga esto solo para los datos de usuario relacionados con la autenticación, no para la información de perfil general, según las Mejores Prácticas :
Los reclamos personalizados solo se utilizan para proporcionar control de acceso. No están diseñados para almacenar datos adicionales (como el perfil y otros datos personalizados). Si bien esto puede parecer un mecanismo conveniente para hacerlo, se desaconseja encarecidamente ya que estas afirmaciones se almacenan en el token de ID y pueden causar problemas de rendimiento porque todas las solicitudes autenticadas siempre contienen un token de ID de Firebase correspondiente al usuario que inició sesión.
Use notificaciones personalizadas para almacenar datos para controlar solo el acceso de los usuarios. Todos los demás datos deben almacenarse por separado a través de la base de datos en tiempo real u otro almacenamiento del lado del servidor.
Ya casi estás ahí. En la documentación heredada de Firebase, teníamos una sección sobre el almacenamiento de dichos datos de usuario adicionales .
La clave es almacenar la información adicional debajo del
uid
del usuario:
let newUser = [
"provider": authData.provider,
"displayName": authData.providerData["displayName"] as? NSString as? String
]
// Create a child path with a key set to the uid underneath the "users" node
// This creates a URL path like the following:
// - https://<YOUR-FIREBASE-APP>.firebaseio.com/users/<uid>
ref.childByAppendingPath("users")
.childByAppendingPath(authData.uid).setValue(newUser)
He agregado una nota de que también debemos agregar esta información en la nueva documentación. Solo necesitamos encontrar un buen lugar para ello.