Autentica mediante GitHub en iOS

Puedes integrar la autenticación de GitHub a tu app para permitir que tus usuarios se autentiquen en Firebase con sus cuentas de GitHub.

Los usuarios autenticados pueden acceder a datos restringidos para los usuarios en Firebase Realtime Database y Cloud Storage.

Antes de comenzar

  1. Agrega Firebase al proyecto de iOS. Incluye los siguientes pods en tu Podfile:
    pod 'Firebase/Auth'
    
  2. Registra tu app como aplicación de desarrollador en GitHub y obtén el ID de cliente y secreto de cliente de OAuth 2.0.
  3. Habilita la autenticación de GitHub:
    1. En Firebase console, abre la sección Auth.
    2. En la pestaña Método de acceso, habilita el método de acceso GitHub y especifica el ID de cliente y el secreto de cliente de OAuth 2.0 que obtuviste de GitHub.
    3. Luego, asegúrate de que tu URI de redireccionamiento de OAuth de Firebase (p. ej., my-app-12345.firebaseapp.com/__/auth/handler) esté configurado como URL de devolución de llamada de autorización en la página de configuración de la app, en la configuración de tu app de GitHub.

Autentica con Firebase

  1. Para integrar la autenticación de GitHub en la app, sigue las indicaciones que se brindan en la documentación para programadores. Usa el flujo de aplicación web y configura un esquema de URL personalizada en la app para manejar la devolución de llamada de OAuth 2.0 desde GitHub. Al final del flujo de acceso de GitHub, recibirás el token de acceso OAuth 2.0.
  2. Importa el módulo de Firebase en tu UIApplicationDelegate:

    Swift

    import Firebase
    

    Objective-C

    @import Firebase;
    
  3. Configura una instancia compartida de FirebaseApp generalmente en el método application:didFinishLaunchingWithOptions: de la aplicación:

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  4. Una vez que un usuario accede correctamente con GitHub, en tu implementación de didCompleteWithResult:error:, intercambia el token de acceso de OAuth 2.0 de GitHub por una credencial de Firebase:

    Swift

    let credential =
        GitHubAuthProvider.credential(withToken: accessToken)
    

    Objective-C

    FIRAuthCredential *credential =
        [FIRGitHubAuthProvider credentialWithToken:accessToken];
    
  5. Por último, autentica con Firebase mediante la credencial de Firebase:

    Swift

    Auth.auth().signInAndRetrieveData(with: credential) { (authResult, error) in
      if let error = error {
        // ...
        return
      }
      // User is signed in
      // ...
    }
    

    Objective-C

    [[FIRAuth auth] signInAndRetrieveDataWithCredential:credential
                                             completion:^(FIRAuthDataResult * _Nullable authResult,
                                                          NSError * _Nullable error) {
      if (error) {
        // ...
        return;
      }
      // User successfully signed in. Get user data from the FIRUser object
      if (authResult == nil) { return; }
      FIRUser *user = authResult.user;
      // ...
    }];
    

Pasos siguientes

Cuando un usuario accede por primera vez, se crea una cuenta de usuario nueva y se la vincula con las credenciales (el nombre de usuario y la contraseña, el número de teléfono o la información del proveedor de autenticación) que el usuario usó para acceder. Esta cuenta nueva se almacena como parte del proyecto de Firebase y puede usarse para identificar a un usuario en todas las apps del proyecto, sin importar el método de acceso que se use.

  • En tus apps, puedes obtener la información básica del perfil del usuario a partir del objeto FIRUser. Consulta Cómo administrar usuarios.

  • En las Reglas de seguridad, de Firebase Realtime Database y Cloud Storage, puedes obtener el ID único del usuario que accedió a partir de la variable auth y usarlo para controlar a qué datos podrá acceder.

Para permitir que los usuarios accedan a tu app con varios proveedores de autenticación, puedes vincular las credenciales de proveedores de autenticación a una cuenta de usuario existente.

Para cerrar la sesión de un usuario, llama a signOut: de la siguiente manera.

Swift

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print ("Error signing out: %@", signOutError)
}
  

Objective-C

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

Tal vez sea conveniente que agregues código de administración de errores para todos los errores de autenticación. Consulta Maneja errores.

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.