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

Autenticação por e-mail/senha

Nesta página

  • Visão geral
  • Configuração
  • Confirmação do usuário
  • Status da nova conta de usuário
  • Enviar um e-mail de confirmação
  • Executar uma função de confirmação
  • Confirmar usuários automaticamente
  • Redefinições de senha
  • Enviar um e-mail de redefinição de senha
  • Executar uma função de redefinição de senha
  • Exemplos
  • Resumo

A autenticação por e-mail/senha permite que os usuários registrem e façam login usando um endereço de e-mail. O Atlas App Services deve confirmar o e-mail/senha dos usuários antes que eles possam se conectar.

O diagrama a seguir mostra o fluxo de processo para fazer login:

Diagrama de fluxo de login de e-mail/senha

Observação

Os endereços de e-mail dos usuários diferenciam maiúsculas de minúsculas. Por exemplo, um usuário com endereço de e-mail TestAccount@example.com não conseguiu se conectar usando o endereço testaccount@example.com.

  • Na navegação à esquerda, clique em Autenticação.

  • Na lista de fornecedores de autenticação, selecione Email/Password. Nesta tela, você pode configurar e habilitar o fornecedor. Use as seções a seguir para orientá-lo durante o processo.

Para habilitar e configurar o provedor de autenticação de e-mail/senha com o App Services CLI, defina um objeto de configuração para ele no /auth/providers.json.

As configurações do provedor de e-mail/senha têm o seguinte formato:

/auth/providers.json
{
"local-userpass": {
"name": "local-userpass",
"type": "local-userpass",
"config": {
"autoConfirm": <boolean>,
"emailConfirmationUrl": <string>,
"confirmEmailSubject": <string>,
"runConfirmationFunction": <boolean>,
"confirmationFunctionName": <string>,
"resetPasswordUrl": <string>,
"resetPasswordSubject": <string>,
"runResetFunction": <boolean>,
"resetFunctionName": <string>,
},
"disabled": <boolean>
}
}

Dica

O name de um fornecedor de autenticação é sempre igual ao seu type.

Antes que um usuário de e-mail/senha possa autenticar, sua aplicação deve registrar e confirmar a nova conta do usuário. Registrar um usuário de e-mail/senha cria um novo objeto de usuário. O App Services exige então a confirmação da conta. Você pode selecionar um dos três métodos para confirmar uma nova conta de usuário:

  • Enviar um e-mail de confirmação

  • Executar uma função de confirmação

  • Confirmar usuários automaticamente

O diagrama a seguir mostra o fluxo de processo para confirmar um usuário:

Diagrama de fluxo de confirmação de e-mail/senha

Uma conta de usuário pode estar em um dos 2 estados: pendente e confirmado.

Quando o processo de confirmação é iniciado, o Atlas App Services cria uma conta de usuário e define o status como Pending Confirmation. Nesse estado, o usuário não pode fazer login. Como o endereço de e-mail agora está associado a uma conta de usuário, qualquer tentativa de registrar novamente o mesmo e-mail não terá sucesso.

Com a conta no estado pendente, o usuário deve confirmar sua conta antes de fazer login. Quando o usuário confirmar sua conta, o Atlas App Services define o status para Confirmed e o usuário pode registrar.

Se você estiver confirmando usuários automaticamente, a conta será criada com o status definido como Confirmed e o usuário poderá fazer login imediatamente após o registro.

Aviso

Use a confirmação automática apenas quando estiver desenvolvendo e testando sua aplicação. Os aplicativos de produção devem sempre usar um processo de confirmação seguro.

Você pode visualizar uma lista de contas de usuário pendentes na UI ou por meio das APIs do App Services:

  • Na navegação à esquerda, em Data Access, clique em App Users.

  • Na parte superior da lista de usuários, selecione o filtro Pending.

Para visualizar usuários pendentes com o Realm CLI, use o comando appservices users list e inclua a opção --pending .

Para visualizar usuários pendentes com a API Admin, use o ponto de extremidade List Users .

Com esse método de confirmação, os usuários deverão responder a um e-mail no momento do cadastro. O e-mail contém um link para uma URL de confirmação. O usuário deve visitar este link dentro de 30 minutos para confirmar que ele controla o endereço de e-mail.

Configure as seguintes configurações para que o App Services envie automaticamente um e-mail de confirmação:

  • Email Confirmation URL: a base da URL incluída em cada e-mail de confirmação. O App Services acrescenta um token e tokenId exclusivos a essa URL. Isso serve como parâmetros de query para criar um link exclusivo para cada confirmação. Para confirmar o usuário, primeiro extraia esses parâmetros de query da URL exclusiva do usuário. Em seguida, passe o token e o tokenId para a função confirmUser do SDK do cliente.

    Os aplicativos móveis podem lidar com a confirmação por e-mail diretamente na aplicação. Para fazer isso, configure links detalhados em links Android ou universais no iOS.

  • Email Confirmation Subject: a linha de assunto do e-mail que o App Services envia. Esse valor é opcional. Se omitido, o App Services usa uma linha de assunto padrão. Os assuntos de confirmação do e-mail personalizados podem conter no máximo 256 caracteres.

Observação

Atualmente, os e-mails de confirmação não são personalizáveis além da URL base e da linha de assunto. Em particular, eles sempre vêm de um endereço de e-mail mongodb.com.

Para aplicativos de produção, você pode usar uma function de confirmação em vez do método de e-mail de confirmação interno. As functions de confirmação permitem que você crie confirmações de e-mail totalmente personalizadas. Consulte Executar uma function de confirmação para obter mais informações.

Você pode Run a Confirmation Function quando um novo usuário se registrar. O App Services passa um token de confirmação, um ID de token e o e-mail do usuário para a função que você cria. Sua função, em seguida, executa a lógica que você precisa para confirmar o usuário e, em seguida, retorna um dos seguintes objetos de resultado, que são explicados em mais detalhes abaixo:

  • { status: 'success' }

  • { status: 'fail' }

  • { status: 'pending' }

Na função, você define lógica personalizada para confirmar os usuários. Por exemplo, sua função pode:

  • Envie e-mails de confirmação personalizados de um domínio específico. Envie-os com um modelo específico usando um serviço externo.

  • Ler permissões de usuário de uma coleção no MongoDB Atlas ou em um serviço REST externo.

  • Envie mensagens de confirmação por um serviço que não seja e-mail, como SMS.

A assinatura da função de confirmação personalizada tem um parâmetro. É um objeto que contém dados de usuário e tokens de confirmação. Esses campos são:

Campo
Descrição
username
O endereço de e-mail do usuário.
token
Um valor único usado para confirmar a identidade do usuário. Você usa isso ao chamar a função Confirmar usuário do SDK.
tokenId
Um valor único usado para confirmar a identidade do usuário. Você usa isso ao chamar a função Confirmar usuário do SDK.

A função personalizada de confirmação do usuário retorna um objeto com um campo de status. A tabela a seguir descreve os valores em potencial deste campo:

Status
Efeito
success
O App Services confirma a identidade do usuário, permitindo ao usuário se conectar à sua nova conta.
pending
O App Services altera o estado de confirmação do usuário para Pending Confirmation. Isso não confirma a identidade do usuário nem permite o login. O aplicativo de cliente deve chamar a função Confirmar usuário do SDK parafinalizar o processo.
fail
O App Services não cria uma conta de usuário. O usuário só pode tentar novamente a confirmação da conta ao se registrar novamente. Como a conta anterior não existe, o usuário pode reutilizar o mesmo nome de usuário (e-mail).

Veja a seguir um exemplo de uma função de confirmação do usuário que:

  1. Verifica se o e-mail fornecido é um e-mail válido.

  2. Confirma se o endereço de e-mail fornecido tem acesso a um serviço específico.

  3. Envia uma mensagem SMS ao usuário.

  4. Se a mensagem for enviada com sucesso, informa ao Atlas App Services para criar uma nova conta com um status pendente.

exports = ({ token, tokenId, username }) => {
// Validate the username
const isValidEmail = myCustomValidatorService.validate(username);
// Check if the user has access to this service
const isPrivileged =
myCustomAuthorizationService.hasAccess(username)
// Send a message to the user so that they can confirm themselves
const msgSendSuccessful = isValidEmail && isPrivileged
&& mySmsService.send(username, token, tokenId)
if ( msgSendSuccessful ) {
return { status: 'pending' };
} else {
return { status: 'fail' };
}
}

A menos que a função personalizada confirme automaticamente o usuário, é necessário fornecer um meio para que o usuário conclua o processo de confirmação após a ativação da função. Depois de concluir as etapas adicionais de confirmação, chame o método Confirmar Usuário do SDK para finalizar a criação da conta de usuário no Atlas App Services.

Você pode configurar o provedor para Automatically Confirm Users. Quando selecionado, o App Services confirma imediatamente novos usuários de e-mail/senha após o registro.

Aviso

O App Services não valida endereços de e-mail confirmados automaticamente. Como resultado, existem alguns motivos pelos quais você pode não conseguir entrar em contato com esses usuários por e-mail:

  • O endereço de e-mail de um usuário confirmado automaticamente pode não pertencer a esse usuário. (por exemplo, um usuário pode se inscrever como steve.jobs@apple.com)

  • O endereço de e-mail de um usuário pode nem mesmo ser um endereço de e-mail válido. (por exemplo, um usuário pode se inscrever como my.name@gmail ou asdavaskljj)

Tenha cuidado com esta opção. Pode ser muito difícil redefinir com segurança a senha de uma conta de usuário sem informações de contato válidas.

Um usuário de e-mail/senha pode esquecer sua senha e precisar redefini-la. Por motivos de segurança, você deve confirmar a identidade do usuário antes de concluir a redefinição de senha. O App Services oferece duas maneiras de fazer isso:

Após confirmar a identidade do usuário, você pode concluir a solicitação de redefinição de senha. Assim que a redefinição da senha for concluída, o usuário poderá se conectar usando a nova senha.

Diagrama de fluxo de redefinição de senha de e-mail/senha

Você pode configurar o provedor para Send a Password Reset Email. Quando um usuário solicita uma redefinição de senha, o App Services envia um URL de redefinição de senha para o endereço de e-mail do usuário. O usuário deve acessar esta URL dentro de 30 minutos.

Ao configurar e-mails de redefinição de senha, você pode definir as seguintes configurações:

  • Password Reset URL: a base da URL incluída em cada e-mail de redefinição de senha. O App Services acrescenta um token e tokenId exclusivos a essa URL. Isso serve como parâmetros de query para criar um link exclusivo para cada redefinição de senha. Para redefinir a senha do usuário, extraia esses parâmetros de query da URL exclusiva do usuário. Passe o token e tokenId para a função resetPassword do SDK do cliente.

  • Reset Password Email Subject: a linha de assunto do e-mail que o App Services envia. Este valor é opcional: se omitido, o App Services usa uma linha de assunto padrão. Os assuntos personalizados de redefinição de senha podem conter no máximo 256 caracteres.

Os aplicativos móveis podem lidar com redefinições de senha diretamente no aplicativo. Configure links profundos no Android ou links universais no iOS.

Observação

Atualmente, os e-mails de redefinição de senha não são personalizáveis além da URL de base e da linha de assunto. Em particular, eles sempre vêm de um endereço de e-mail mongodb.com.

Para aplicações de produção, você pode usar uma função de redefinição de senha personalizada em vez do método interno de e-mail de redefinição de senha. Funções personalizadas permitem que você crie confirmações de e-mail totalmente personalizadas ou use um método diferente do e-mail para confirmar uma solicitação de redefinição de senha.

Você pode configurar o provedor para Run a Password Reset Function. Você define uma função para que os App Services sejam executados quando você usa callResetPasswordFunction() no SDK. O App Services transmite o e-mail do usuário, a nova senha desejada, um token de confirmação e um ID de token para a função que você cria. Em seguida, sua função executa a lógica necessária para confirmar a identidade do usuário antes de redefinir a senha.

O App Services pode redefinir imediatamente a senha do usuário. Ou você pode exigir confirmação adicional do aplicativo do cliente.

A função do App Services deve retornar um objeto contendo uma chave status. Os principais mapas para uma string com um dos seguintes valores, que são explicados em mais detalhes abaixo:

  • { status: 'success' }

  • { status: 'fail' }

  • { status: 'pending' }

Aviso

A função do Realm SKD callResetPasswordFunction() não é autenticada. Sua recuperação de senha é destinada apenas a usuários que, de outra forma, não podem se conectar em suas contas. Como resultado, você não pode associar nenhuma chamada a essa função a um usuário específico do App Services. Retornar um status success altera permanentemente a senha para o novo valor no parâmetro password da função. Portanto, retornar success pode fazer com que qualquer usuário redefina a senha de qualquer outro usuário do aplicativo. Por motivos de segurança, você deve enviar uma mensagem ao proprietário da conta por meio de um modo confiável de comunicação e retornar pending.

Você pode usar uma função de redefinição de senha personalizada para definir seus próprios fluxos de redefinição de senha:

  • Envie e-mails de redefinição de senha personalizados de um domínio específico com um modelo determinado usando um serviço externo.

  • Conecte-se com uma collection do MongoDB Atlas para implementar um "período de bloqueio" de redefinição de senha. Isso pode evitar muitas tentativas de redefinição de senha em uma única conta em determinada faixa de tempo.

  • Envie mensagens de redefinição de senha personalizadas por um serviço diferente do e-mail.

Observação

Usar uma função de redefinição de senha é mutuamente exclusivo da configuração do App Services para enviar um e-mail de redefinição de senha. Quando você configura a redefinição de senha para usar uma função personalizada, chamar sendResetPasswordEmail() no SDK do cliente retorna um erro.

A assinatura da função de redefinição de senha personalizada é variada: ela aceita qualquer número de parâmetros. O primeiro é sempre um objeto que contém dados de usuário e tokens de confirmação. Todos os parâmetros a seguir são parâmetros personalizados. Eles são passados para o SDK do cliente como uma coleção de argumentos. Por exemplo, a chamada do SDK do cliente:

callResetPasswordFunction("myUsername", "newPassword", ["Security Question Answer 1", "Security Question Answer 2", "securityCode:0510"])

Torna-se esta assinatura personalizada para a função de redefinição de senha:

resetFunc({username, password, token, tokenId, currentPasswordValid}, securityAnswer1, securityAnswer2, securitySMSCode)

Na função de redefinição de senha personalizada, um objeto deve ser passado como o primeiro parâmetro. A tabela a seguir descreve os campos encontrados neste objeto:

Campo
Descrição
username
O endereço de e-mail do usuário.
password
Uma nova senha proposta para o usuário. Se esta função retornar o status de bem-sucedido, esta é a nova senha do usuário.
token
Um valor único usado para atualizar a senha do usuário.
tokenId
Um valor exclusivo usado para confirmar a identidade do usuário usando a função do SDK confirmUser.
currentPasswordValid
Um booleano que é verdadeiro se um usuário solicitar a alteração de sua senha para sua senha existente.

A função de redefinição de senha personalizada deve retornar um objeto que contém um campo status. O valor deste campo status pode ser um dos seguintes:

Status
Estado de redefinição de senha
Efeito do SDK
success
O App Services altera a senha do usuário para o parâmetro password fornecido imediatamente. Retorne success somente se autenticar a identidade do usuário na função personalizada. Você pode fazer isso com uma pergunta de segurança ou outro meio seguro.
Se a chamada de função personalizada retornar um success, sua aplicação de cliente poderá interpretar a falta de um erro como uma redefinição de senha bem-sucedida. O usuário pode entrar utilizando a nova senha.
pending
O App Services aguarda o aplicativo do cliente executar alguma ação adicional para concluir a redefinição de senha. Por exemplo, a função de redefinição de senha personalizada pode enviar token e tokenId por e-mail ou SMS para verificar a identidade do usuário.
O método do SDK que chama essa função não recebe um valor de retorno, portanto, não trata diretamente de um caso pending . Você deve implementar lógica personalizada em seu aplicação para concluir o processo de redefinição de senha. Por exemplo, você pode implementar um link detalhado ou um link universal no cliente para extrair token e tokenId e, em seguida, chamar o método resetPassword para concluir uma redefinição.
fail
Nada acontece.
O SDK interpreta um fail retornado como um erro ou exceção ao chamar a função de redefinição de senha personalizada.

Uma função de redefinição de senha personalizada pode incluir elementos semelhantes a este exemplo:

exports = ({ token, tokenId, username, password, currentPasswordValid }) => {
// check if the username corresponds to a real user
const isUser = myCustomValidator.validate(username);
// check if the user is attempting to reset their password to their current password
if (currentPasswordValid) {
myCustomNotifier.sendMessage(username, "Cannot reset password to current password.");
return { status: 'fail' };
}
// check if the user has requested a password reset too often recently
const isNotCoolingDown = myCustomCooldownService.canReset(username, 'myCustomService')
// send a message to the user in some way so that the user can confirm themselves
const msgSendSuccessful = isUser && isNotCoolingDown && myCustomMsgr.send(username, token, tokenId)
if ( msgSendSuccessful ) {
return { status: 'pending' };
} else {
return { status: 'fail' };
}
}

Para ver exemplos de fluxos de registro, login e redefinição de senha usando autenticação por e-mail/senha, consulte os Realm SDKs:

  • A autenticação por e-mail/senha permite que os usuários criem uma identidade em seu aplicativo com base em um nome de usuário e uma senha.

  • Para habilitar a autenticação por e-mail/senha, seu aplicativo deve oferecer suporte a um método de confirmação por e-mail e a um método de redefinição da senha do usuário. Existem várias opções de implementação para cada um desses requisitos.

Voltar

Chave API