O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Autenticar com o Firebase usando um sistema de autenticação personalizado e C++

Você pode integrar o Firebase Authentication a um sistema de autenticação personalizado modificando seu servidor de autenticação para produzir tokens assinados personalizados quando um usuário fizer login. Seu aplicativo recebe esse token e o usa para autenticar com o Firebase.

Antes de você começar

  1. Adicione o Firebase ao seu projeto C++ .
  2. Obtenha as chaves do servidor do seu projeto:
    1. Vá para a página Contas de serviço nas configurações do seu projeto.
    2. Clique em Gerar nova chave privada na parte inferior da seção SDK Admin do Firebase da página Contas de serviço .
    3. O par de chaves pública/privada da nova conta de serviço é salvo automaticamente em seu computador. Copie este arquivo para seu servidor de autenticação.

Autenticar com o Firebase

A classe Auth é o gateway para todas as chamadas de API.
  1. Adicione os arquivos de cabeçalho Auth e App:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. Em seu código de inicialização, crie uma classe firebase::App .
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
    
  3. Adquira a classe firebase::auth::Auth para seu firebase::App . Há um mapeamento um para um entre App e Auth .
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    
Chame Auth::SignInWithCustomToken com o token do seu servidor de autenticação.
  1. Quando os usuários fizerem login no seu aplicativo, envie as credenciais de login (por exemplo, nome de usuário e senha) para o servidor de autenticação. Seu servidor verifica as credenciais e retorna um token personalizado se elas forem válidas.
  2. Depois de receber o token personalizado do seu servidor de autenticação, passe-o para Auth::SignInWithCustomToken para entrar no usuário:
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCustomToken(custom_token);
    
  3. Se o seu programa tiver um loop de atualização que é executado regularmente (digamos, 30 ou 60 vezes por segundo), você pode verificar os resultados uma vez por atualização com Auth::SignInWithCustomTokenLastResult :
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCustomTokenLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::User* user = *result.result();
        printf("Sign in succeeded for `%s`\n", user->display_name().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    Ou, se o seu programa for orientado a eventos, você pode preferir para registrar um retorno de chamada no Future .

Próximos passos

Depois que um usuário entra pela primeira vez, uma nova conta de usuário é criada e vinculada às credenciais, ou seja, o nome de usuário e a senha, o número de telefone ou as informações do provedor de autenticação com as quais o usuário fez login. Essa nova conta é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em todos os aplicativos do projeto, independentemente de como o usuário faça login.

  • Nos seus aplicativos, você pode obter as informações básicas do perfil do usuário no objeto firebase::auth::User :

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      std::string name = user->display_name();
      std::string email = user->email();
      std::string photo_url = user->photo_url();
      // The user's ID, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server,
      // if you have one. Use firebase::auth::User::Token() instead.
      std::string uid = user->uid();
    }
    
  • Nas regras de segurança do Firebase Realtime Database e do Cloud Storage , você pode obter o ID de usuário exclusivo do usuário conectado a partir da variável de auth e usá-lo para controlar quais dados um usuário pode acessar.

Você pode permitir que os usuários façam login no seu aplicativo usando vários provedores de autenticação vinculando as credenciais do provedor de autenticação a uma conta de usuário existente.

Para desconectar um usuário, chame SignOut() :

auth->SignOut();