Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Autenticar usuários — .NET SDK

Nesta página

  • Conecte-se
  • Utilizador anónimo
  • Usuário de e-mail/senha
  • Usuário da chave de API
  • Usuário JWT personalizado
  • Usuário de função personalizada
  • Usuário do Facebook
  • Usuário do Google
  • Usuário da Apple
  • Login off-line
  • Desconectar um usuário
  • Recuperar o usuário atual
  • Obtenha um token de acesso do usuário
  • Atualize a expiração do token
  • Observar alterações de autenticação

O SDK fornece uma API para autenticar usuários usando qualquer provedor de autenticação habilitado. Crie uma instância de um objeto Credentials e passe-a para o método LogInAsync() para autenticar e obter uma instância de usuário . A classe Credentials expõe métodos de fábrica que correspondem a cada um dos fornecedores de autenticação:

Antes de autenticar um usuário, verifique se tem:

Se você ativou a autenticação anônima na IU do App Services, os usuários podem fazer login imediatamente no seu aplicativo sem fornecer nenhuma informação de identificação. O seguinte código mostra como fazer isso:

var user = await app.LogInAsync(Credentials.Anonymous());

Se tiver activado a autenticação de Correio Electrónico/Palavra-passe, pode iniciar sessão utilizando o seguinte código:

var user = await app.LogInAsync(
Credentials.EmailPassword("caleb@mongodb.com", "MySekritPwd"));

Se você tiver ativado a autenticação da chave de API, poderá fazer login usando o seguinte código:

var user = await app.LogInAsync(Credentials.ApiKey(apiKey));

Se você tiver ativado o provedor de autenticação Custom JWT, poderá fazer login usando o seguinte código:

var user =
await app.LogInAsync(Credentials.JWT(jwt_token));

Se você tiver ativado o provedor de autenticação Custom Function, poderá fazer login usando o seguinte código:

var functionParameters = new
{
username = "caleb",
password = "MySekritPwd",
IQ = 42,
hasPets = true
};
var user =
await app.LogInAsync(Credentials.Function(functionParameters));

O provedor de autenticação do Facebook permite que você autentique usuários por meio de um aplicativo do Facebook usando sua conta existente do Facebook.

Importante

Habilite o provedor de autenticação do Facebook

Para conectar um usuário com uma conta do Facebook existente, você deve configurar e habilitar o provedor de autenticação do Facebook para seu aplicativo.

Importante

Não armazene URLs de fotos de perfil do Facebook

Os URLs da imagem de perfil do Facebook incluem o token de acesso do usuário para conceder permissão à imagem. Para garantir a segurança, não armazene um URL que inclua um token de acesso do usuário. Em vez disso, acesse o URL diretamente dos campos de metadados do usuário quando precisar buscar a imagem.

var user =
await app.LogInAsync(Credentials.Facebook(facebookToken));

Se você tiver ativado a autenticação do Google, pode fazer login usando o seguinte código:

var user =
await app.LogInAsync(Credentials.Google(googleAuthCode, GoogleCredentialType.AuthCode));

Se tiver ativado o Iniciar sessão com autenticação Apple, pode iniciar sessão utilizando o seguinte código:

var user =
await app.LogInAsync(Credentials.Apple(appleToken));

Dica

Se você receber uma mensagem de erro Login failed dizendo que o token contains an invalid number of segments, verifique se está passando uma versão de string codificada em UTF-8 do JWT.

Quando seu aplicativo Realm autentica um usuário, armazena em cache as credenciais do usuário. Você pode verificar as credenciais de usuário existentes para ignorar o fluxo de login e acessar o usuário em cache. Use isto para abrir um realm offline.

Observação

O login inicial exige uma conexão de rede

Quando um usuário se inscreve em seu aplicativo ou faz login pela primeira vez com uma conta existente em um cliente, o cliente deve ter uma conexão de rede. A verificação de credenciais de usuário em cache permite que você abra um domínio offline, mas somente se o usuário já tiver feito login enquanto estiver online.

O exemplo a seguir verifica se há um objeto de usuário em cache. Caso contrário, ele registra o usuário. Caso contrário, ele usa as credenciais em cache:

if (app.CurrentUser == null)
{
// App must be online for user to authenticate
user = await app.LogInAsync(
Credentials.EmailPassword("caleb@mongodb.com", "MySekritPwd"));
config = new PartitionSyncConfiguration("_part", user);
realm = await Realm.GetInstanceAsync(config);
}
else
{
// This works whether online or offline
user = app.CurrentUser;
config = new PartitionSyncConfiguration("_part", user);
realm = Realm.GetInstance(config);
}

Uma vez conectado, você pode sair chamando o método LogOutAsync() :

await user.LogOutAsync();

Aviso

Se o usuário se desconectar, você não poderá mais ler ou gravar dados em nenhum domínio sincronizado que o usuário tenha aberto. Consequentemente, qualquer operação que ainda não tenha sido concluída antes de o usuário iniciar o logout não poderá ser concluída com êxito e provavelmente resultará em erro. Todos os dados de uma operação de gravação que falhar dessa forma serão perdidos.

Depois de ter um usuário autenticado, você pode recuperar o objeto Usuário com a propriedade App.CurrentUser . O objeto CurrentUser é mantido no armazenamento local, portanto, mesmo que o aplicativo seja desligado após a autenticação inicial, não é necessário chamar o LoginAsync novamente (a menos que o usuário tenha se desconectado). Em vez disso, use Realm.GetInstance(config), onde config é um objeto PartitionSyncConfiguration . Essa abordagem resulta em uma inicialização mais rápida e também permite que o usuário trabalhe offline.

Quando um usuário se conecta, o Atlas App Services cria um token de acesso para o usuário que lhe concede acesso à sua aplicação. O Realm SDK gerencia automaticamente os tokens de acesso, atualiza-os quando expiram e inclui um token de acesso válido para o usuário atual em cada solicitação. O Realm não atualiza automaticamente o token de atualização. Quando o token de atualização expira, o usuário deve se conectar novamente.

Se você enviar solicitações fora do SDK, precisará incluir o token de acesso do usuário em cada solicitação e atualizar manualmente o token quando ele expirar.

Você pode acessar e atualizar um token de acesso de usuário conectado ao SDK a partir de seu objeto Realm.User, como no seguinte exemplo:

// Returns a valid user access token to authenticate requests
public async Task<string> GetValidAccessToken(User user)
{
// An already logged in user's access token might be stale. To
// guarantee that the token is valid, refresh it.
await user.RefreshCustomDataAsync();
return user.AccessToken;
}

A atualização dos tokens expira após um período de tempo definido. Quando o token de atualização expira, o token de acesso não pode mais ser atualizado e o usuário deve se conectar novamente.

Se o token de atualização expirar após a abertura do domínio, o dispositivo não poderá sincronizar até que o usuário faça login novamente. Seu manipulador de erros de sincronização deve implementar uma lógica que capture um erro de token expirado ao tentar sincronizar e, em seguida, redirecionar os usuários para um fluxo de login.

Para obter informações sobre como configurar a expiração do token de atualização, consulte Gerencie sessões de usuário na documentação do App Services.

Novo na versão v11,6,0.

Você pode observar um fluxo de eventos de alteração de autenticação chamando User.Changed() em um objeto de usuário válido.

Atualmente, User.Changed() Atlas Triggers em todos os evento de usuário e você deve adicionar um manipulador para garantir que suas respostas aos evento sejam idempotentes.

app.CurrentUser.Changed += (change, _) =>
{
Debug.WriteLine($"Auth change: {change}, {_}");
};

Voltar

Criar e excluir usuários