Esta página describe datos de usuario personalizados en una aplicación de App Services y cómo administrarlos con el SDK Realm Kotlin.
Importante
Currently you can only read custom user data with the Kotlin SDK. In a future update to the SDK, you will be able to write custom user data from the SDK as well.
Puede crear, actualizar o eliminar datos de usuario personalizados utilizando uno de los otros SDK de Realm, con funciones de Atlas o consultando directamente a Atlas.
Atlas App Services te permite asociar datos con un usuario autenticado, como el lenguaje preferido del usuario, la fecha de nacimiento o la zona horaria local. Puedes almacenar estos datos personalizados de usuario arbitrarios sobre tus usuarios y leerlos desde tu aplicación cliente.
Nueva en la versión 1.9.0.
You can serialize custom user data using an EJSON encoder. For more information, including examples, refer to EJSON Encoding for Atlas.
Requisitos previos
Para usar datos de usuario personalizados, debes tener una App Services App con datos de usuario personalizados habilitados.
To set up an App Services App that uses custom user data, refer to the following:
Habilitar datos de usuario personalizados en la documentación de App Services
Read Custom User Data
You can retrieve custom user data of a currently logged-in user using the User.customDataAsBsonDocument() extension function:
val user = app.currentUser!! val customUserData = user.customDataAsBsonDocument()
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 cuando este actualiza su token de acceso o cuando se llama explícitamente a la función User.refreshCustomData() para solicitar la última versión de los datos personalizados de un usuario.
// Update the custom data object user.refreshCustomData() // Now when you access the custom data, it's the // updated data object val updatedUserData = user.customDataAsBsonDocument()
Escribir datos de usuario personalizados con funciones Atlas
You can write to custom user data with an Atlas Function. Atlas Functions are server-side JavaScript functions that are built into your backend App. You can call an Atlas Function directly from the Realm Kotlin SDK.
Actualmente, no es posible guardar en datos de usuario personalizados directamente desde el SDK de Realm Kotlin.
There is no single pattern for adding custom user data from an Atlas Function. You should write your Function or Functions to suit your application's use case.
In this example, the Atlas Function takes an object passed by the client and adds it to the custom user data collection in Atlas. The Function creates the custom user data if it doesn't already exist and replaces all data in it if it does exist.
exports = async function writeCustomUserData(newCustomUserData) { const userId = context.user.id; const customUserDataCollection = context.services .get("mongodb-atlas") .db("custom-user-data-database") .collection("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; };
The Kotlin SDK code to call this Function:
// Write the custom user data through a call // to the `writeCustomUserData` function val functionResponse = user.functions .call<BsonDocument>("writeCustomUserData", mapOf("userId" to user.id, "favoriteColor" to "blue") ) // Refreshed custom user data contains updated // `favoriteColor` value added in above Atlas Function call user.refreshCustomData() val updatedUserData = user.customDataAsBsonDocument()
Nota
To learn more about Atlas Functions, refer to the following documentation:
Funciones de Atlas en la documentación de App Services
Delete Custom Data with Atlas Functions
Los datos de usuario personalizados se almacenan en un documento vinculado al objeto Usuario.
Importante
Eliminar un usuario no elimina sus datos personalizados. Es posible que deba eliminarlos por completo para garantizar el cumplimiento legal (por ejemplo, para cumplir con los requisitos de eliminación de cuentas de Apple).).
Para borrar los datos de usuario personalizados, debes borrar manualmente el documento de datos personalizados del usuario.
You can delete custom user data using an Atlas Function. Currently, it is not possible to delete custom user data directly from the Realm Kotlin SDK.
In this example, the Atlas Function does not require any arguments. The Function uses the function context to determine the caller's user ID, and deletes the custom user data document matching the user's ID.
exports = async function deleteCustomUserData() { const userId = context.user.id; const customUserDataCollection = context.services .get("mongodb-atlas") .db("custom-user-data-database") .collection("custom-user-data"); const filter = { userId }; const res = await customUserDataCollection.deleteOne(filter); return res; };
El código del Kotlin SDK que llama a esta función requiere solo un usuario con sesión iniciada para llamar a la función:
val deleteResponse = user.functions .call<BsonDocument>("deleteCustomUserData")