Leer los datos personalizados de un usuario
Puedes leer el datos de usuario personalizados de un usuario actualmente conectado a través de ese usuario User Objeto. No se pueden editar datos de usuario personalizados mediante un User objeto. Para editar datos de usuario personalizados, consulte Actualizar datos de usuario personalizados. Para leer los datos, acceda a la custom_data propiedad del User objeto de un usuario conectado:
// Custom user data could be stale, so refresh it before reading it user.refresh_custom_user_data().get(); auto userData = user.custom_data().value(); /* Parse the string custom data to use it more easily in your code. In this example, we're using the nlohmann/json library, but use whatever works with your application's constraints. */ auto userDataObject = nlohmann::json::parse(userData); CHECK(userDataObject["favoriteColor"] == "gold");
Advertencia
Los datos personalizados pueden estar obsoletos
Atlas App Services no actualiza dinámicamente el valor del documento de datos personalizados del usuario del lado del cliente inmediatamente cuando cambian los datos subyacentes. En su lugar, App Services obtiene la versión más reciente de los datos personalizados del usuario cada vez que un usuario actualiza su token de acceso, que utilizan la mayoría de las operaciones del SDK que contactan con el backend de App Services. Si el token no se actualiza antes de su 30 tiempo de expiración predeterminado de minutos, el SDK de C++ lo actualiza en la siguiente llamada al backend. Los datos personalizados del usuario podrían estar obsoletos hasta 30 minutos, más el tiempo hasta la siguiente llamada del SDK al backend.
Nota
Si necesita la versión más reciente de los datos de usuario personalizados, utilice la función refresh_custom_user_data() para solicitar la última versión de los datos personalizados de un usuario.
Crear un documento de datos personalizado de un usuario
Para crear datos de usuario personalizados, cree un documento de MongoDB en la colección de datos de usuario personalizados. El campo "ID de usuario" del documento debe contener el ID del usuario.
Tip
En la interfaz de usuario de App Services, marque la casilla App Users página debajo de la pestaña Custom User Data para buscar y configurar ajustes de datos de usuario personalizados, incluidos:
El clúster, la base de datos y la colección de datos de usuario personalizados
El campo de ID de usuario utilizado para asignar documentos de datos de usuario personalizados a los usuarios
Una forma de crear este documento es llamando a una función Atlas que inserte un documento de datos personalizado en la colección de datos de usuario personalizada. No existe un patrón único para agregar datos de usuario personalizados desde una función Atlas. Debe escribir la función o funciones según el caso de uso de su aplicación.
En este ejemplo, la función Atlas toma un objeto transferido por el cliente y lo añade a la colección de datos de usuario personalizados en Atlas. La función crea los datos de usuario personalizados si aún no existen y reemplaza todos los datos que contienen, si existen.
exports = async function updateCustomUserData(newCustomUserData) { const userId = context.user.id; const customUserDataCollection = context.services .get("mongodb-atlas") .db("custom-user-data-database") .collection("cpp-custom-user-data"); const filter = { userId }; // Replace the existing custom user data document with the new one. const update = { $set: newCustomUserData }; // Insert document if it doesn't already exist const options = { upsert: true }; const res = await customUserDataCollection.updateOne(filter, update, options); return res; };
El siguiente ejemplo llama a una función para insertar un documento que contiene el ID de usuario del usuario actualmente conectado y un favoriteColor valor en la recopilación de datos de usuario personalizada:
auto user = app.login(realm::App::credentials::anonymous()).get(); // Functions take a string argument. Any quotes within the array must be // escaped. auto customData = "[{\"userId\":\"" + user.identifier() + "\",\"favoriteColor\":\"gold\"}]"; // Call an Atlas Function to insert custom data for the user auto result = user.call_function("updateCustomUserData", customData).get();
Puede agregar cualquier número de campos y valores arbitrarios al documento de datos de usuario personalizados al crearlo. El campo de ID de usuario es el único requisito para que el documento esté disponible en el objeto User como datos de usuario personalizados.
Actualizar los datos personalizados de un usuario
Puede actualizar datos de usuario personalizados utilizando una función Atlas, MongoDB Compass o MongoDB Atlas Data Explorer.
Para actualizar los datos de usuario personalizados de un usuario mediante una Atlas Function, edita el documento de MongoDB cuyo campo de ID de usuario contenga el ID del usuario. El siguiente ejemplo llama a la misma función utilizada para crear el documento de datos de usuario personalizado anterior. Aquí, actualizamos el campo favoriteColor del documento que contiene el ID de usuario del usuario actualmente autenticado:
// Functions take a string argument. Any quotes within the array must be // escaped. auto updatedData = "[{\"userId\":\"" + user.identifier() + "\",\"favoriteColor\":\"black\"}]"; // Call an Atlas Function to update custom data for the user auto updateResult = user.call_function("updateCustomUserData", updatedData).get(); // Refresh the custom user data before reading it to verify it succeeded user.refresh_custom_user_data().get(); auto updatedUserData = user.custom_data().value(); /* Parse the string custom data to use it more easily in your code. In this example, we're using the nlohmann/json library, but use whatever works with your application's constraints. */ auto updatedUserDataObject = nlohmann::json::parse(updatedUserData); CHECK(updatedUserDataObject["favoriteColor"] == "black");
Tip
Para determinar el ID de un usuario, acceda a la propiedad user.identifier() o busque al usuario en la interfaz de usuario de App Services en la página App Users bajo la pestaña Users.
Eliminar los datos personalizados de un usuario
Los datos de usuario personalizados se almacenan en un documento vinculado al objeto de usuario. Eliminar un usuario no elimina los datos de usuario personalizados. Para eliminar completamente los datos de usuario y cumplir, por ejemplo, con laguía de eliminación de cuentas de Apple., debe eliminar manualmente el documento de datos personalizados del usuario.
Puede eliminar datos de usuario personalizados utilizando una función Atlas, MongoDB Compass o MongoDB Atlas Data Explorer.
En este ejemplo, la función Atlas no requiere argumentos. Utiliza el contexto de la función para determinar el ID de usuario del usuario que la llama y elimina el documento de datos de usuario personalizado que coincide con dicho ID.
exports = async function deleteCustomUserData() { const userId = context.user.id; const customUserDataCollection = context.services .get("mongodb-atlas") .db("custom-user-data-database") .collection("cpp-custom-user-data"); const filter = { userId }; const res = await customUserDataCollection.deleteOne(filter); return res; };
El código que llama a esta función solo requiere que un usuario haya iniciado sesión para llamar a la función:
auto deleteResult = user.call_function("deleteCustomUserData", "[]").get();