Menu Docs
Página inicial do Docs
/ /
Serviços Atlas App
/

Definir metadados personalizados do usuário

Nesta página

  • Usuário de dados personalizado
  • Criar e gerenciar dados de usuário personalizados
  • Dados de usuário personalizados seguros
  • Função de criação de usuário
  • Habilitar dados de usuário personalizados
  • Acessar dados personalizados de usuário a partir de um aplicativo cliente
  • Melhores práticas para modificar permissões em dados de usuário personalizados
  • Metadados do provedor de autenticação
  • Configurar metadados do provedor de autenticação
  • Acessar metadados de usuário a partir de um aplicativo cliente

Pode associar metadados personalizados a cada utilizador do seu aplicativo. Por exemplo, você pode armazenar o idioma preferido de um usuário, a data de nascimento ou qualquer outra informação que queira associar ao usuário.

Você pode obter os metadados de um usuário de duas fontes:

  • Uma coleção no MongoDB Atlas que armazena dados de usuário personalizados. Você pode associar cada usuário a um documento na coleção pelo ID de usuário. Você pode armazenar dados arbitrários em cada documento.

  • Um provedor de autenticação. Se o provedor usar tokens da Web JSON, como Google, Facebook ou um provedor personalizado, você poderá definir campos de metadados na configuração do provedor que associam dados do JWT do usuário à sua conta de usuário.

Você pode armazenar dados arbitrários sobre os usuários do aplicativo em uma coleção MongoDB. Seu aplicativo mapeia cada usuário para um documento na coleção queryndo um campo específico para o ID do usuário. Quando um usuário se autentica, seu aplicativo procura os dados do usuário e os inclui em seu token de acesso.

Considere um usuário com o ID "63ed2dbe5960df2af7fd216e". Se a sua collection de dados de usuário personalizada foi configurada para armazenar o ID do usuário no userId, o usuário mapearia para o seguinte documento:

{
"_id": "63ed2e4fb7f367c92578e526",
"user_id": "63ed2dbe5960df2af7fd216e",
"preferences": {
"preferDarkMode": true
},
"dateOfBirth": "1989-03-11T00:00:00.000Z"
}

Ao usar dados de usuário personalizados, lembre-se do seguinte:

  • Armazenar um documento por usuário: os documentos que contêm dados do usuário devem incluir o ID do usuário em um campo específico. Se vários documentos especificam o ID do mesmo usuário, o App Services expõe apenas os dados do documento que foi inserido primeiro.

  • Manter dados personalizados pequenos: o documento de usuário personalizado completo do usuário está incluído em seu token de acesso. Em geral, tente manter os documentos de usuário de dados personalizado pequenos (menos de 16 KB). Outros serviços podem limitar o tamanho do cabeçalho HTTP, o que significa que objetos de usuário de dados personalizado maiores podem causar problemas de integração.

  • Dados personalizados podem estar obsoletos: os dados personalizados de um usuário são originados de uma coleção do MongoDB, mas são armazenados e lidos a partir do token de acesso de autenticação de um usuário. Se um usuário tiver um token de acesso válido quando o documento subjacente for alterado, seus dados personalizados nessa sessão não serão atualizados até que eles atualizem seu token de acesso ou se autentiquem novamente.

Você é responsável por gerenciar documentos na collection de dados de usuário personalizada. Dependendo do seu caso de uso, você pode:

  • Criar automaticamente um documento para cada usuário quando ele se registra em seu aplicação usando umafunção de criação de usuário do . Essa função é executada antes que o usuário receba um token de acesso, portanto, os dados adicionados estarão no token de acesso em seu primeiro login.

  • Use um trigger de autenticação para atualizar os dados personalizados de um usuário quando ele se registrar ou fizer login e para excluir seus dados se a conta for excluída. Os gatilhos são executados de forma assíncrona e podem terminar após o token de acesso do usuário ser criado.

  • Use um trigger agendado para atualizar ou excluir periodicamente dados de usuário personalizados.

  • Crie, atualize e exclua documentos manualmente na collection usando operações CRUD padrão de uma Função, de um Atlas Device SDK, de um driver do MongoDB ou do MongoDB Compass.

Se os dados personalizados do usuário do seu aplicativo incluírem informações pessoais ou privadas do usuário, você deverá restringir o acesso à collection de dados de usuário personalizada. Considere usar um dos seguintes modelos de permissão para restringir o acesso de leitura e gravação somente a usuários privilegiados:

  • Um usuário pode ler ou gravar seu próprio documento de dados de usuário personalizado. Rejeite o acesso de leitura e gravação a todos os outros documentos.

    Exemplo

    A seguinte configuração de coleção tem uma função que concede a um usuário acesso de leitura e escrita a um documento se e somente se sua ID estiver contida no campo user_id do documento.

    Uma configuração da collection de dados de usuário personalizada
    {
    "database": "<Database Name>",
    "collection": "<Collection Name>",
    "roles": [
    {
    "name": "ThisUser",
    "apply_when": { "user_id": "%%user.id%%" },
    "insert": false,
    "read": true,
    "write": true,
    "search": false,
    "delete": false
    }
    ],
    "filters": []
    }
  • Nenhum usuário pode ler ou escrever documentos de usuários de dados personalizados. Em vez disso, use uma função do sistema para gerenciar usuários de dados personalizados em nome dos usuários.

Você pode definir uma função que é executada toda vez que um novo usuário é bem-sucedido se registra, mas antes que sua nova conta de usuário seja criada. Se a função gera erros ou gera erros, a criação da conta do usuário falha. Isso permite você garante que os usuários sempre tenham dados personalizados associados a eles uma vez criado.

A função recebe um objeto de metadados do usuário como seu único argumento. Você pode usar isso para criar um novo documento de dados de usuário personalizado para o usuário.

exports = async function onUserCreation(user) {
const customUserDataCollection = context.services
.get("mongodb-atlas")
.db("myapp")
.collection("users");
try {
await customUserDataCollection.insertOne({
// Save the user's account ID to your configured user_id_field
user_account_id: user.id,
// Store any other user data you want
favorite_color: "blue",
});
} catch (e) {
console.error(`Failed to create custom user data document for user:${user.id}`);
throw e
}
}

Dica

Após configurar uma função de criação de usuário, os Serviços de aplicativos evitam que você exclua a função. Se quiser excluir a função , primeiro altere a configuração dos dados personalizados do usuário para usar uma função de criação de usuário diferente .

Você pode configurar e habilitar dados de usuário personalizados na interface de administração do App Services .

1

Clique em App Users no menu de navegação esquerdo. Em seguida, selecione a aba User Settings e encontre a seção Custom User Data .

2

Clique no botão Enable Custom User Data para defini-lo para On.

O botão de alternância para ativar dados de usuário personalizado na interface do usuário do App Services está definido como Ativado.
clique para ampliar
3

Você deve armazenar os dados personalizados dos usuários do seu aplicativo em uma coleção única de um cluster vinculado do MongoDB Atlas. Para configurar seu aplicativo para ler dados do usuário desta coleção, você precisa Especifique os seguintes valores:

  • Cluster Name: O nome de um cluster MongoDB vinculado que contém a coleção de dados personalizados do usuário.

  • Database Name: O nome do banco de dados MongoDB que contém a coleta de dados personalizada do usuário.

  • Collection Name: o nome da collection do MongoDB que contém dados de usuário personalizado.

Caixas de entrada para o campo de coleção e ID de usuário na interface do usuário do App Services.
clique para ampliar
4

Cada documento na coleção personalizada de dados do usuário tem um campo que o mapeia para um usuário específico do aplicativo. O campo deve ser do tipo ObjectID ou um tipo string que represente esse ObjectID. Este campo deve estar presente em todos os documentos que mapeiam para um usuário.

Especifique o nome do campo que contém a ID de cada usuário na entrada User ID Field.

Observação

Se dois documentos contiverem o mesmo ID de usuário, um armazenado como uma string e o outro como um ObjectID, o App Services mapeia o documento com o tipo de string para o usuário.

5

Se você quiser usar uma função de criação de usuário, defina-a no editor incorporado ou faça referência a uma função existente pelo nome.

6

Depois de configurar a collection de dados de usuário customizada, é possível disponibilizar os dados personalizados do usuário para os aplicativos clientes implementando o aplicativo. Para implementar um rascunho de aplicativo a partir da UI do App Services:

  1. Clique em Deploy no menu de navegação esquerdo.

  2. Encontre o rascunho na tabela de histórico de implementação e clique em Review & Deploy Changes.

  3. Revise a diferença de alterações e clique em Deploy.

Depois que o aplicativo for implementado corretamente, o App Services começa a associar dados personalizados aos usuários. Quando um usuário faz se conecta, o App Services faz query automaticamente à collection de dados de usuário customizada em busca de um documento em que o User ID Field especificado contém o ID do usuário. Se um documento corresponder, o App Services expõe os dados no documento no campo custom_data do objeto de usuário desse usuário.

1

Para definir dados de usuário personalizados com appservices, você precisa de uma cópia local dos arquivos de configuração do seu aplicativo.

Para extrair uma cópia local da versão mais recente do seu aplicativo, execute o seguinte:

appservices pull --remote="<Your App ID>"

Dica

Você também pode baixar uma cópia dos arquivos de configuração do seu aplicativo na tela Deploy > Export App na interface do usuário do App Services.

2

Você deve armazenar os dados personalizados para os usuários do seu aplicativo em uma única coleção de um Atlas cluster vinculado. Cada documento na coleção deve incluir um campo específico que contenha o ID do usuário do usuário dos App Services que ele descreve.

Para configurar seu aplicação para ler dados de usuário desta coleção, defina um documento de configuração de dados de usuário personalizado no /auth/custom_user_data.json:

/auth/custom_user_data.json
{
"enabled": <Boolean>,
"mongo_service_name": "<MongoDB Data Source Name>",
"database_name": "<Database Name>",
"collection_name": "<Collection Name>",
"user_id_field": "<User ID Field Name>",
"on_user_creation_function_name": "<Function Name>"
}
3

Depois de configurar os dados personalizados do usuário, você pode enviar a configuração atualizada para o aplicativo remoto. O App Services CLI implementa imediatamente a atualização no push.

appservices push --remote="<Your App ID>"

Para exemplos de código que demonstram como acessar e atualizar dados de usuário personalizado do aplicação cliente , consulte a documentação para os Atlas Device SDKs:

As permissões serão atualizadas automaticamente para um usuário quando você alterar seu documento de dados de usuário personalizado. A sessão de usuário será encerrada e atualizada automaticamente.

Para que as permissões de usuário sejam atualizadas automaticamente, os documentos de dados de usuário personalizado devem ser armazenados em uma coleção normal e não em uma exibição ou coleção de séries temporais .

Para que as permissões sejam atualizadas automaticamente, não exclua um documento de dados de usuário personalizado. Em vez disso, desmarque todos os campos que não sejam ID no documento.

Exemplo

Considere o seguinte documento em que o usuário recebe permissões de leitura e gravação:

documento de dados de usuário personalizado
{
"_id": "63ed2erealobjectid78e526",
"user_id": "63ed2dbe5960df2af7fd216e",
"canRead": true,
"canWrite": true,
}

Os campos canRead e canWrite podem ajudar a determinar as funções da coleção deste documento. Por exemplo, o campo canRead é utilizado para determinar a elegibilidade para o seguinte readAllRole na expressão apply_when :

documento de dados de usuário personalizado
{
"name": "readAllRole"
"apply_when": {"%%user.custom_data.canRead": true},
...
}

Digamos que você gostaria de remover o documento do usuário porque ele não está ativo há um longo período de tempo. Primeiro, você precisa remover corretamente as permissões do funcionário, desmarcando os campos que não são ID. O documento seria então:

documento de dados de usuário personalizado atualizado corretamente
{
"_id": "63ed2erealobjectid78e526",
"user_id": "63ed2dbe5960df2af7fd216e"
}

A redefinição do campo não ID permite que os App Services atualizem automaticamente as permissões do usuário de acordo com as funções. Agora você pode excluir o documento com segurança, se necessário.

O Atlas App Services pode ler os metadados do usuário a partir do fornecedor de autenticação. Em seguida, o App Services expõe os dados de cada usuário em um campo de seu objeto de usuário. Por exemplo, você pode acessar o nome, e-mail, aniversário ou gênero de um usuário.

É possível configurar o App Services para solicitar metadados com o token de acesso quando os usuários iniciam sessão. Você pode acessar esses dados a partir do objeto do usuário conectado com um SDK do cliente.

Você pode definir os metadados para solicitar ao configurar os provedores de autenticação. Especifique os campos de metadados opcionais que pretende aceder através da conta do utilizador. Esses campos de metadados variam dependendo do provedor.

Fornecedor
Campos de metadados
Facebook
  • name

  • first_name

  • last_name

  • picture

  • gender

  • birthday

  • min_age

  • max_age

  • email

Google
  • name

  • first_name

  • last_name

  • picture

  • email

JWT personalizado
Qualquer campo no JWT conforme especificado pela configuração de campos de metadados do fornecedor JWT personalizado.

Importante

Evite metadados do provedor de autenticação obsoletos

Se os metadados de um usuário forem atualizados após a emissão do token de acesso, as solicitações que usam o token de acesso criado anteriormente não terão os metadados recém-atualizados. Os metadados do usuário serão atualizados quando eles atualizarem o token de acesso ou se autenticarem novamente.

Observação

Metadados do provedor de segurança e autenticação

Os metadados do provedor de autenticação podem ser definidos externamente por clientes, bem como por provedores de autenticação externos, e devem ser considerados com cautela. Não confie apenas nos metadados do provedor de autenticação para tomar decisões relacionadas à segurança, por exemplo, usar esses metadados em expressões de regras para permissões de acesso a dados.

1

Você pode configurar e habilitar os metadados do usuário na interface do usuário do App Services. Para acessar a página de configuração:

  • Clique em Authentication no menu de navegação esquerdo.

  • Selecione a guia Authentication Providers.

  • Pressione o botão EDIT do provedor cujos metadados você deseja configurar.

2

Google ou Facebook

Marque as caixas de seleção ao lado dos campos de metadados que você deseja habilitar.

As caixas de seleção para habilitar os campos de metadados do usuário na UI do App Services
clique para ampliar

Autenticação JWT personalizada

Você pode especificar os campos de metadados aceitos pelo seu fornecedor de identidade. Depois de pressionar o botão Add Field, defina:

  • O caminho

  • O nome do campo

  • Se o campo é opcional ou obrigatório

Para obter mais detalhes, consulte Campos de metadados JWT.

Adicionar metadados obrigatórios/opcionais, caminho e nome na UI do App Services
clique para ampliar

Depois de configurar os metadados que pretende acessar, pressione o botão Save Draft .

3

Após atualizar a configuração de metadados, você deve implantar seu aplicativo. Para implementar um rascunho de aplicativo a partir da interface do usuário do App Services:

  1. Clique em Deploy no menu de navegação esquerdo.

  2. Encontre o rascunho na tabela de histórico de implementação e clique em Review & Deploy Changes.

  3. Revise a diferença de alterações e clique em Deploy.

Depois que o aplicativo é implantado com sucesso, o App Services começa a associar metadados aos usuários. Quando um usuário faz login, o App Services solicita permissão do usuário para acessar os metadados solicitados. Se o usuário aprovar, os Serviços de Aplicativo expõem os dados no objeto de usuário desse usuário.

1

Para atualizar seu aplicativo com serviços de aplicativo, você precisa de uma cópia local de seus arquivos de configuração.

Para extrair uma cópia local da versão mais recente do seu aplicativo, execute o seguinte:

appservices pull --remote="<Your App ID>"

Dica

Você também pode baixar uma cópia dos arquivos de configuração do seu aplicativo na UI do App Services. Go para a tela Deploy > Export App no dashboard do aplicativo.

2

Você pode encontrar metadata_fields do provedor de autenticação para sua aplicação em /auth/providers.json. Atualize esta array para solicitar metadados do usuário do provedor de autenticação.

Google ou Facebook

Esta array se assemelha a:

/auth/providers.json
{ ...other config details...
"metadata_fields": [
{
"required": false,
"name": "name"
},
{
"required": false,
"name": "gender"
}
]
}

Autenticação JWT personalizada

A array metadata_fields tem uma propriedade adicional, field_name. Na autenticação JSON web token personalizado, name representa o caminho para o campo. O field_name representa o nome do campo.

/auth/providers.json
{ ...other config details...
"metadata_fields": [
{
"required": true,
"name": "user.name",
"field_name": "name"
},
{
"required": false,
"name": "user.favoriteColor",
"field_name": "favoriteColor"
}
]
}
3

Depois de configurar os dados personalizados do usuário, você pode enviar a configuração atualizada para o aplicativo remoto. O App Services CLI implementa imediatamente a atualização no push.

appservices push --remote="<Your App ID>"
1

Chame o endpoint de autenticação do usuário administrador com seu par de chaves da API do MongoDB Atlas:

curl -X POST \
https://services.cloud.mongodb.com/api/admin/v3.0/auth/providers/mongodb-cloud/login \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"username": "<Public API Key>",
"apiKey": "<Private API Key>"
}'

Se a autenticação for bem-sucedida, o corpo da resposta conterá um objeto JSON com um valor access_token :

{
"access_token": "<access_token>",
"refresh_token": "<refresh_token>",
"user_id": "<user_id>",
"device_id": "<device_id>"
}

O access_token concede acesso à App Services Admin API. Você deve incluí-lo como um token do portador no cabeçalho Authorization para todas as solicitações de API Admin.

2

Envie uma solicitação para o endpoint Atualizar um provedor de autenticação . No corpo da solicitação, defina metadata_fields para o provedor.

Certifique-se de incluir sua API Admin access_token, o groupId do projeto Atlas que contém seu aplicativo, a string hexadecimal appId interna do aplicativo e o valor _id do provedor de autenticação:

curl --request PATCH 'https://services.cloud.mongodb.com/api/admin/v3.0/groups/{groupId}/apps/{appId}/auth_providers/{providerId}' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"_id": "<Provider ID>",
"name": "oauth2-facebook",
"type": "oauth2-facebook",
"redirect_uris": ["https://example.com/"],
"config": {
"clientId": "<Facebook Client ID>"
},
"secret_config": {
"clientSecret": "<Facebook Client Secret Name>"
},
"metadata_fields": [
{ "required": false, "name": "name" },
{ "required": true, "name": "first_name" },
{ "required": true, "name": "last_name" },
{ "required": false, "name": "picture" },
{ "required": false, "name": "gender" },
{ "required": false, "name": "birthday" },
{ "required": false, "name": "min_age" },
{ "required": false, "name": "max_age" },
{ "required": false, "name": "email" }
],
"disabled": false
}'
curl --request PATCH 'https://services.cloud.mongodb.com/api/admin/v3.0/groups/{groupId}/apps/{appId}/auth_providers/{providerId}' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"_id": "<Provider ID>",
"name": "oauth2-google",
"type": "oauth2-google",
"redirect_uris": ["https://example.com/"],
"config": {
"clientId": "<Google Client ID>"
},
"secret_config": {
"clientSecret": "<Google Client Secret Name>"
},
"metadata_fields": [
{ "required": false, "name": "name" },
{ "required": true, "name": "first_name" },
{ "required": true, "name": "last_name" },
{ "required": false, "name": "picture" },
{ "required": false, "name": "gender" },
{ "required": false, "name": "birthday" },
{ "required": false, "name": "min_age" },
{ "required": false, "name": "max_age" },
{ "required": false, "name": "email" }
],
"disabled": false
}'
curl --request PATCH 'https://services.cloud.mongodb.com/api/admin/v3.0/groups/{groupId}/apps/{appId}/auth_providers/{providerId}' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"_id": "<Provider ID>",
"name": "custom-token",
"type": "custom-token",
"metadata_fields": [
{
"required": true,
"name": "jwt.field.path",
"field_name": "metadataFieldName"
}
],
"config": {
"audience": [],
"requireAnyAudience": false,
"signingAlgorithm": "HS256",
"useJWKURI": false
},
"secret_config": {
"signingKeys": [
"<JWT Signing Key>"
]
},
"disabled": true
}'

Se você configurar com sucesso os campos de metadados do provedor, o App Services retornará uma resposta 204 .

Observação

Dicas para usuários com vários provedores de autenticação vinculados

  • Para garantir os metadados mais atualizados, os usuários devem se autenticar novamente depois de alternar para um provedor de autenticação diferente. Se isso não for feito, poderá resultar em metadados desatualizados refletidos na tabela Users na página App Users da interface do usuário e para solicitações que usam provedores de autenticação.

  • Se um usuário alternar entre provedores de autenticação, pode levar até 30 minutos para que os metadados se propaguem. É sempre garantido que a solicitação tenha os metadados mais atualizados associados ao provedor de autenticação usado.

Para exemplos de código que demonstram como acessar os dados de metadados do usuário a partir do aplicação do cliente , consulte a documentação para os SDKs do Dispositivo Atlas :

Voltar

Criar um usuário