Autenticarse con Firebase usando un sistema de autenticación personalizado y C++

Puedes integrar Firebase Authentication con un sistema de autenticación personalizado modificando tu servidor de autenticación para producir tokens firmados personalizados cuando un usuario inicia sesión correctamente. Tu aplicación recibe este token y lo usa para autenticarse con Firebase.

Antes de que empieces

  1. Agrega Firebase a tu proyecto de C++ .
  2. Obtenga las claves del servidor de su proyecto:
    1. Vaya a la página Cuentas de servicio en la configuración de su proyecto.
    2. Haga clic en Generar nueva clave privada en la parte inferior de la sección Firebase Admin SDK de la página Cuentas de servicio .
    3. El par de claves pública/privada de la nueva cuenta de servicio se guarda automáticamente en su computadora. Copie este archivo a su servidor de autenticación.

Autenticar con Firebase

La clase Auth es la puerta de entrada para todas las llamadas API.
  1. Agregue los archivos de encabezado de autenticación y aplicación:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. En su código de inicialización, cree una clase 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. Adquiera la clase firebase::auth::Auth para su firebase::App . Existe una asignación uno a uno entre App y Auth .
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    
Llame Auth::SignInWithCustomToken con el token de su servidor de autenticación.
  1. Cuando los usuarios inicien sesión en su aplicación, envíe sus credenciales de inicio de sesión (por ejemplo, su nombre de usuario y contraseña) a su servidor de autenticación. Su servidor verifica las credenciales y devuelve un token personalizado si son válidas.
  2. Después de recibir el token personalizado de su servidor de autenticación, páselo a Auth::SignInWithCustomToken para iniciar sesión como usuario:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithCustomToken(custom_token);
    
  3. Si su programa tiene un ciclo de actualización que se ejecuta regularmente (digamos, 30 o 60 veces por segundo), puede verificar los resultados una vez por actualización con Auth::SignInWithCustomTokenLastResult :
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithCustomTokenLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::AuthResult auth_result = *result.result();
        printf("Sign in succeeded for `%s`\n",
               auth_result.user.display_name().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    O, si su programa está controlado por eventos, tal vez prefiera para registrar una devolución de llamada en el futuro .

Próximos pasos

Después de que un usuario inicia sesión por primera vez, se crea una nueva cuenta de usuario y se vincula a las credenciales (es decir, el nombre de usuario y la contraseña, el número de teléfono o la información del proveedor de autenticación) con las que el usuario inició sesión. Esta nueva cuenta se almacena como parte de su proyecto de Firebase y se puede usar para identificar a un usuario en cada aplicación de su proyecto, independientemente de cómo inicie sesión el usuario.

  • En sus aplicaciones, puede obtener la información básica del perfil del usuario desde firebase::auth::User objeto:

    firebase::auth::User user = auth->current_user();
    if (user.is_valid()) {
      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();
    }
    
  • En las reglas de seguridad de Firebase Realtime Database y Cloud Storage, puede obtener el ID de usuario único del usuario que inició sesión a partir de la variable auth y usarlo para controlar a qué datos puede acceder un usuario.

Puede permitir que los usuarios inicien sesión en su aplicación utilizando múltiples proveedores de autenticación vinculando las credenciales del proveedor de autenticación a una cuenta de usuario existente.

Para cerrar la sesión de un usuario, llame a SignOut() :

auth->SignOut();