Dados personalizados do usuário - C++ SDK
Nesta página
Ler os dados personalizados de um usuário
Você pode ler os dados de usuário personalizados de um usuário conectado no momento por meio do objeto User
desse usuário. Você não pode editar dados de usuário personalizados por meio de um objeto User
. Para editar dados de usuário personalizados, consulte Atualizar dados de usuário personalizados. Para ler os dados, acesse a propriedade custom_data
no objeto User
de um usuário 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");
Aviso
Os dados personalizados podem ser obsoletos
O Atlas App Services não atualiza dinamicamente o valor do documento de dados personalizado do usuário do lado do cliente imediatamente quando os dados subjacentes são alterados. Em vez disso, o Atlas App Services obtém a versão mais recente dos dados personalizados do usuário sempre que um usuário atualiza seu token de acesso, que é usado pela maioria das operações do SDK que entram em contato com o backend do Atlas App Services . Se o token não for atualizado antes de seu tempo de expiração padrão de 30 minutos, o C++ SDK atualizará o token na próxima chamada para o backend. Os dados personalizados do usuário podem ficar obsoletos por até 30 minutos, mais o tempo até que ocorra a próxima chamada do SDK para o backend.
Observação
Se você precisar da versão mais recente dos dados personalizados do usuário, use a função refresh_custom_user_data() para solicitar a versão mais recente dos dados personalizados de um usuário.
Criar um documento de dados personalizado do usuário
Para criar dados de usuário personalizados para um usuário, crie um documento MongoDB na collection de dados de usuário personalizada. O campo ID do usuário do documento deve conter o ID de usuário do usuário.
Dica
Na interface do usuário do App Services, verifique a página App Users na guia Custom User Data para localizar e definir configurações de dados de usuário personalizadas, incluindo:
O cluster, o banco de dados e a coleção de dados de usuário personalizados
O campo de ID do usuário usado para mapear documentos de dados de usuário personalizados para usuários
Uma maneira de criar esse documento é chamando uma Atlas Function que insere um documento de dados personalizado na coleção de dados personalizados do usuário. Não existe um padrão único para adicionar dados de usuário personalizado de um Atlas Function. Você deve escrever sua função ou funções para se adequar ao caso de uso do seu aplicativo.
Neste exemplo, a Função de Realm pega um objeto passado pelo cliente e o adiciona à collection de dados de usuário personalizada no Atlas. A Função cria os dados de usuário personalizados se ainda não existirem e substitui todos os dados nele se existir.
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; };
O exemplo a seguir chama uma função para inserir um documento contendo o ID do usuário conectado no momento e um valor favoriteColor
na collection de dados de usuário 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();
Você pode adicionar qualquer número de campos e valores arbitrários ao documento de dados de usuário personalizado ao criá-lo. O campo ID do usuário é o único requisito para que o documento fique disponível no objeto User
como dados de usuário personalizado.
Atualizar os dados personalizados de um usuário
Você pode atualizar dados de usuário personalizados usando uma Atlas Function, MongoDB Compass ou o Explorador de Dados doMongoDB Atlas .
Para atualizar os dados personalizados de um usuário com uma Função de Realm, edite o documento MongoDB cujo campo ID do usuário contém o ID do usuário do usuário. O exemplo a seguir chama a mesma função usada para criar o documento de dados de usuário personalizado acima. Aqui, atualizamos o campo favoriteColor
do documento que contém o ID do usuário do usuário conectado no momento:
// 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");
Dica
Para determinar o ID de um usuário, acesse a propriedade user.identifier()
ou localize o usuário na interface do usuário do App Services na página App Users Users .
Excluir os dados personalizados de um usuário
Os dados de usuário personalizados são armazenados em um documento vinculado ao objeto de usuário. Excluir um usuário não exclui os dados personalizados do usuário. Para excluir totalmente os dados do usuário para cumprir, por exemplo, a orientação de exclusão de conta da Apple, você deve excluir manualmente o documento de dados personalizado do usuário.
Você pode excluir dados de usuário personalizados usando uma Atlas Function, MongoDB Compass ou o Explorador de Dados doMongoDB Atlas .
Neste exemplo, a Função Atlas não exige nenhum argumento. A Função usa o contexto da função para determinar o ID de usuário do chamador e exclui o documento de dados de usuário personalizado que corresponde ao ID do usuário.
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; };
O código que chama essa função exige que apenas um usuário conectado chame a função:
auto deleteResult = user.call_function("deleteCustomUserData", "[]").get();