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

Autenticar usuários - SDK do Node.js

Nesta página

  • Conecte-se
  • Sessões de usuário
  • 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
  • Obtenha um token de acesso do usuário
  • Atualize a expiração do token
  • Desconectar um usuário

O Realm fornece uma API para autenticar usuários em um aplicativo com qualquer provedor de autenticação habilitado. Instancie um objeto Credentials e passe-o para o método app.login() para autenticar um logon de usuário e criar um objeto User.

O Atlas App Services gerencia sessões com tokens de acesso e atualizam tokens. Os SDKs do cliente fornecem a lógica para gerenciar tokens e fornecem solicitações.

Dica

Veja também:

Sessões de usuário

O provedor Anônimo permite que os usuários façam login em seu aplicativo com contas temporárias que não têm informações associadas.

Para se conectar, crie uma credencial anônima e passe-a para App.logIn():

// Create an anonymous credential
const credentials = Realm.Credentials.anonymous();
const user = await app.logIn(credentials);
// Create an anonymous credential
const credentials = Realm.Credentials.anonymous();
const user = await app.logIn(credentials);

O provedor de autenticação por e-mail/senha permite que os usuários se conectem ao seu aplicativo com um endereço de e-mail e uma senha.

Para se conectar, crie uma credencial de e-mail/senha com o endereço de e-mail e a senha do usuário e passe-a para App.logIn():

// Create an email/password credential
const credentials = Realm.Credentials.emailPassword(
"someone@example.com",
"Pa55w0rd!"
);
const user = await app.logIn(credentials);
// Create an email/password credential
const credentials = Realm.Credentials.emailPassword(
"someone@example.com",
"Pa55w0rd!"
);
const user = await app.logIn(credentials);

O provedor de autenticação da chave de API permite que os processos de servidor acessem seu aplicativo diretamente ou em nome de um usuário.

Para se conectar com uma chave de API, crie uma credencial de chave de API com uma chave de API de servidor ou usuário e passe-a para App.logIn():

// Get the API key from the local environment
const apiKey = process.env?.appServicesApiKey;
if (!apiKey) {
throw new Error("Could not find a Server API Key.");
}
// Create an api key credential
const credentials = Realm.Credentials.apiKey(apiKey);
const user = await app.logIn(credentials);
// Get the API key from the local environment.
const apiKey = process.env?.appServicesApiKey;
if (!apiKey) {
throw new Error("Could not find a Server API Key.");
}
// Create an api key credential.
const credentials = Realm.Credentials.apiKey(apiKey);
const user = await app.logIn(credentials);

O provedor de autenticação JWT personalizado permite que você lide com a autenticação do usuário com qualquer sistema de autenticação que retorne um token da Web JSON.

Para se conectar, crie uma credencial JWT personalizada com um JWT do sistema externo e passe-a para App.logIn():

// Create a custom jwt credential
const jwt = await authenticateWithExternalSystem();
const credentials = Realm.Credentials.jwt(jwt);
const user = await app.logIn(credentials);
// Create a custom jwt credential.
const jwt = await authenticateWithExternalSystem();
const credentials = Realm.Credentials.jwt(jwt);
const user = await app.logIn(credentials);

O provedor de autenticação de função personalizada permite lidar com a autenticação do usuário executando uma função que recebe uma carga de informações arbitrárias sobre um usuário.

Para se conectar com o provedor de função personalizada, crie uma credencial de função personalizada com um objeto de carga útil e passe-a para App.logIn():

// Create a custom function credential
const credentials = Realm.Credentials.function({
username: "ilovemongodb",
});
const user = await app.logIn(credentials);
// Create a custom function credential.
const credentials = Realm.Credentials.function({
username: "ilovemongodb",
});
const user = await app.logIn(credentials);

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.

Você pode usar o SDK oficial do Facebook para lidar com a autenticação do usuário e redirecionar o fluxo de um aplicação cliente . Quando autenticado, o SDK do Facebook retorna um token de acesso que você pode enviar para sua aplicação Node.js e usar para acabar de conectar o usuário à sua aplicação.

// Get the access token from the Facebook SDK
const { accessToken } = FB.getAuthResponse();
// Define credentials with the access token from the Facebook SDK
const credentials = Realm.Credentials.facebook(accessToken);
// Log the user in to your app
await app.logIn(credentials);

O provedor de autenticação do Google permite autenticar usuários por meio de um projeto do Google usando a conta do Google existente.

Observação

Habilitar o provedor de autenticação do Google

Para autenticar um usuário do Google, você deve configurar o provedor de autenticação do Google. Você deve habilitar o OpenID Connect para usar o provedor de autenticação do Google com o Node.js SDK.

Para configurar seu aplicativo para autenticação de usuário do Google na configuração do seu aplicativo:

  1. No console do Google Cloud Platform, crie um OAuth 2.0 ID do cliente do tipo "aplicativo Web".

  2. Configure seu aplicativo de backend para usar esse ID de cliente e o segredo de cliente associado.

  3. Habilite o OpenID Connect no backend.

Use a Google Auth Library para Node.js oficial para gerenciar a autenticação do usuário e redirecionar o fluxo de um aplicativo cliente Node.js:

  1. Instale os pacotes Realm e Google APIs npm.

    npm install realm googleapis
  2. Importe os pacotes para o seu projeto.

    const Realm = require("realm");
    const { google } = require("googleapis");
  3. Criar configuração para o cliente Google OAuth 2,0 e Realm.

    // Configure and instantiate Google OAuth2.0 client
    const oauthConfig = {
    client_id: GOOGLE_CLIENT_ID,
    project_id: GOOGLE_PROJECT_ID,
    auth_uri: "https://accounts.google.com/o/oauth2/auth",
    token_uri: "https://oauth2.googleapis.com/token",
    auth_provider_x509_cert_url: "https://www.googleapis.com/oauth2/v1/certs",
    client_secret: GOOGLE_CLIENT_SECRET,
    redirect_uris: [`${BASE_URL}/auth/google/callback`],
    JWTsecret: "secret",
    scopes: [
    "https://www.googleapis.com/auth/userinfo.email",
    "https://www.googleapis.com/auth/userinfo.profile",
    "openid",
    // any other scopes you might require. View all here - https://developers.google.com/identity/protocols/oauth2/scopes
    ],
    };
    const OAuth2 = google.auth.OAuth2;
    const oauth2Client = new OAuth2(
    oauthConfig.client_id,
    oauthConfig.client_secret,
    oauthConfig.redirect_uris[0]
    );
    // Instantiate Realm app
    const realmApp = new Realm.App({
    id: REALM_APP_ID,
    });
  4. Gere um link de login OAuth e passe para o cliente do aplicativo.

    // generate OAuth 2.0 log in link
    const loginLink = oauth2Client.generateAuthUrl({
    access_type: "offline", // Indicates that we need to be able to access data continuously without the user constantly giving us consent
    scope: oauthConfig.scopes,
    });
  5. Processe a solicitação do servidor de autenticação do Google, que inclui um código de acesso na string de query usando o método getToken() do cliente Google OAuth 2.0. Na função de retorno de chamada, entre em seu aplicativo utilizando o id_token.

    // Get Google token and use it to sign into Realm
    oauth2Client.getToken(authCodeFromQueryString, async function (
    error,
    token
    ) {
    if (error) return errorHandler(error);
    try {
    const credential = Realm.Credentials.google({
    idToken: token.id_token,
    });
    const user = await realmApp.logIn(credential);
    console.log("signed in as Realm user", user.id);
    } catch (error) {
    errorHandler(error);
    }
    });

Exemplo

Autenticar com o Google em um servidor Node.js

Consulte o código para ver um exemplo de servidor Node.js que implementa o Sign in With Google. Todos os 2 do Google OAuth .0 a implementação está no arquivo server.js .

O exemplo usa Express para roteamento e a Biblioteca de autenticação do Google para Node.js.

Talvez você queira se autenticar com o Google em um servidor Node.js para executar operações do lado do servidor em nome de um usuário, como chamar uma função Atlas com as credenciais de um usuário.

O provedor de autenticação Apple permite que você autentique usuários por meio do Sign-in With Apple.

Observação

Habilite o provedor de autenticação da Apple

Para autenticar um usuário da Apple, você deve configurar o provedor de autenticação da Apple.

Você pode usar o login oficial com o Apple JavaScript SDK para lidar com a autenticação do usuário e redirecionar o fluxo de um aplicação cliente . Quando autenticado, o SDK do JavaScript da Apple retorna um token de ID que você pode enviar para sua aplicação Node.js e usar para acabar de conectar o usuário à sua aplicação.

// Get the ID token from the Apple SDK
const { id_token } = await AppleID.auth.signIn();
// Define credentials with the ID token from the Apple SDK
const credentials = Realm.Credentials.apple(id_token);
// Log the user in to your app
const user = await app.logIn(credentials);

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.

// Log user into your App Services App.
// On first login, the user must have a network connection.
const getUser = async () => {
// If the device has no cached user credentials, log in.
if (!app.currentUser) {
const credentials = Realm.Credentials.anonymous();
await app.logIn(credentials);
}
// If the app is offline, but credentials are
// cached, return existing user.
return app.currentUser!;
};

Para saber como usar o usuário em cache na Configuração Sincronizada e acessar um domínio enquanto estiver off-line, leia a documentação Open a Synced Realm While Offline (Abrir um domínio sincronizado enquanto estiver off-line ).

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:

// Gets a valid user access token to authenticate requests
async function getValidAccessToken(user) {
// An already logged in user's access token might be stale. To
// guarantee that the token is valid, refresh it if necessary.
await user.refreshCustomData();
return user.accessToken;
}
// Gets a valid user access token to authenticate requests
async function getValidAccessToken(user: Realm.User) {
// An already logged in user's access token might be stale. To
// guarantee that the token is valid, refresh it if necessary.
await user.refreshCustomData();
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.

Para desconectar qualquer usuário, chame o User.logOut() em sua instância de usuário.

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.

// Log out the current user
await app.currentUser?.logOut();

Voltar

Criar e excluir usuários