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:
Habilitado um ou mais fornecedores de autenticação
Conecte-se
Utilizador anónimo
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());
Usuário de e-mail/senha
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"));
Usuário da chave de API
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));
Usuário JWT personalizado
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));
Usuário de função personalizada
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));
Usuário do Facebook
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));
Usuário do Google
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));
Usuário da Apple
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.
Login off-line
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); }
Desconectar um usuário
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.
Recuperar o usuário atual
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.
Obtenha um token de acesso do usuário
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; }
Atualize a expiração do token
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.
Observar alterações de autenticação
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}, {_}"); };