Catch up on everthing we announced at this year's Firebase Summit. Learn more

Authentification à l'aide de GitHub sur les plates-formes Apple

Vous pouvez permettre à vos utilisateurs de s'authentifier auprès de Firebase à l'aide de fournisseurs OAuth tels que GitHub en intégrant la connexion OAuth générique dans votre application à l'aide du SDK Firebase pour effectuer le flux de connexion de bout en bout.

Avant que tu commences

Pour connecter les utilisateurs à l'aide de comptes GitHub, vous devez d'abord activer GitHub en tant que fournisseur de connexion pour votre projet Firebase :

Utilisez Swift Package Manager pour installer et gérer les dépendances de Firebase.

  1. Dans Xcode, avec votre projet d'application ouvert, accédez à Fichier> Paquets Swift> Ajouter un package de dépendance.
  2. Lorsque vous y êtes invité, ajoutez le référentiel SDK des plates-formes Firebase Apple :
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Choisissez la bibliothèque d'authentification Firebase.
  5. Une fois terminé, Xcode commencera automatiquement à résoudre et à télécharger vos dépendances en arrière-plan.

Maintenant, effectuez quelques étapes de configuration :

  1. Dans la console Firebase , ouvrez la section Auth.
  2. Sur l'onglet Connexion méthode, activez le fournisseur GitHub.
  3. Ajoutez l'ID client et le client secret de la console développeur de ce fournisseur à la configuration du fournisseur:
    1. Enregistrez votre application comme une application de développeur sur GitHub et obtenir votre application de OAuth 2.0 ID client et secret client.
    2. Assurez - vous que votre Firebase OAuth URI de redirection (par exemple my-app-12345.firebaseapp.com/__/auth/handler ) est définie comme l' URL de votre rappel Autorisation dans la page des paramètres de votre application sur votre la configuration de l' application GitHub .
  4. Cliquez sur Enregistrer.

Gérer le flux de connexion avec le SDK Firebase

Pour gérer le flux de connexion avec le SDK des plates-formes Firebase Apple, procédez comme suit :

  1. Ajoutez des schémas d'URL personnalisés à votre projet Xcode :

    1. Ouvrez votre configuration de projet : double-cliquez sur le nom du projet dans l'arborescence de gauche. Sélectionnez votre application de la section CIBLES, puis sélectionnez l'onglet Info, et développez la section Types d'URL.
    2. Cliquez sur le bouton +, et ajouter un schéma d'URL pour votre ID client inverse. Pour trouver cette valeur, ouvrez le GoogleService-Info.plist fichier de configuration, et recherchez le REVERSED_CLIENT_ID clé. Copiez la valeur de cette clé, et le coller dans l'URL Schemes boîte sur la page de configuration. Laissez les autres champs vides.

      Une fois terminée, votre configuration devrait ressembler à ce qui suit (mais avec des valeurs spécifiques à votre application) :

  2. Créer une instance d'un OAuthProvider en utilisant l'ID de fournisseur github.com.

    Rapide

        var provider = OAuthProvider(providerID: "github.com")
        

    Objectif c

        FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"github.com"];
        
  3. Facultatif: spécifiez des paramètres supplémentaires OAuth personnalisé que vous souhaitez envoyer à la demande OAuth.

    Rapide

        provider.customParameters = [
          "allow_signup": "false"
        ]
        

    Objectif c

        [provider setCustomParameters:@{@"allow_signup": @"false"}];
        

    Pour les paramètres pris en charge GitHub, consultez la documentation GitHub OAuth . Notez que vous ne pouvez pas passer des paramètres Firebase-requis avec setCustomParameters . Ces paramètres sont client_id, redirect_uri, response_type, de la portée et de l' État.

  4. Facultatif: Spécifiez OAuth 2.0 supplémentaires portées au - delà de profil de base que vous voulez la demande du fournisseur d'authentification. Si votre application nécessite un accès aux données privées de l' utilisateur à partir des API GitHub, vous devez demander des autorisations pour accéder aux API GitHub sous Autorisations API dans la console développeur GitHub. Les étendues OAuth demandées doivent correspondre exactement à celles préconfigurées dans les autorisations d'API de l'application.

    Rapide

        // Request read access to a user's email addresses.
        // This must be preconfigured in the app's API permissions.
        provider.scopes = ["user:email"]
        

    Objectif c

        // Request read access to a user's email addresses.
        // This must be preconfigured in the app's API permissions.
        [provider setScopes:@[@"user:email"]];
        

    Pour en savoir plus, reportez - vous à la documentation de GitHub .

  5. Facultatif: Si vous voulez personnaliser la façon dont votre application se présente le SFSafariViewController ou UIWebView lors de l' affichage du reCAPTCHA à l'utilisateur, créer une classe personnalisée qui est conforme au FIRAuthUIDelegate protocole, et le transmettre à getCredentialWithUIDelegate:completion: .

  6. Authentifiez-vous auprès de Firebase à l'aide de l'objet fournisseur OAuth.

    Rapide

        provider.getCredentialWith(nil) { credential, error in
          if error != nil {
            // Handle error.
          }
          if credential != nil {
            Auth().signIn(with: credential) { authResult, error in
              if error != nil {
                // Handle error.
              }
              // User is signed in.
              // IdP data available in authResult.additionalUserInfo.profile.
    
              guard let oauthCredential = authResult.credential as? OAuthCredential else { return }
              // GitHub OAuth access token can also be retrieved by:
              // oauthCredential.accessToken
              // GitHub OAuth ID token can be retrieved by calling:
              // oauthCredential.idToken
            }
          }
        }
        

    Objectif c

        [provider getCredentialWithUIDelegate:nil
                                   completion:^(FIRAuthCredential *_Nullable credential,
                                                NSError *_Nullable error) {
          if (error) {
           // Handle error.
          }
          if (credential) {
            [[FIRAuth auth] signInWithCredential:credential
                                      completion:^(FIRAuthDataResult *_Nullable authResult,
                                                NSError *_Nullable error) {
              if (error) {
                // Handle error.
              }
              // User is signed in.
              // IdP data available in authResult.additionalUserInfo.profile.
    
              FIROAuthCredential *oauthCredential = (FIROAuthCredential *)authResult.credential;
              // GitHub OAuth access token can also be retrieved by:
              // oauthCredential.accessToken
              // GitHub OAuth ID token can be retrieved by calling:
              // oauthCredential.idToken
            }];
          }
        }];
        

    En utilisant le jeton d'accès OAuth, vous pouvez appeler l' API GitHub .

    Par exemple, pour obtenir des informations de profil de base, vous pouvez appeler l'API REST, en passant jeton d' accès à l' Authorization en- tête:

    https://api.github.com/user
    
  7. Bien que les exemples ci-dessus se concentrent sur les flux de connexion, vous avez également la possibilité de lier un fournisseur GitHub à un utilisateur existant. Par exemple, vous pouvez lier plusieurs fournisseurs au même utilisateur, ce qui leur permet de se connecter avec l'un ou l'autre.

    Rapide

        Auth().currentUser.link(withCredential: credential) { authResult, error in
          if error != nil {
            // Handle error.
          }
          // GitHub credential is linked to the current user.
          // IdP data available in authResult.additionalUserInfo.profile.
          // GitHub OAuth access token can also be retrieved by:
          // authResult.credential.accessToken
          // GitHub OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
        }
        

    Objectif c

        [[FIRAuth auth].currentUser
            linkWithCredential:credential
                    completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
          if (error) {
            // Handle error.
          }
          // GitHub credential is linked to the current user.
          // IdP data available in authResult.additionalUserInfo.profile.
          // GitHub OAuth access token is can also be retrieved by:
          // authResult.credential.accessToken
          // GitHub OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
        }];
        
  8. Le même modèle peut être utilisé avec reauthenticateWithCredential qui peut être utilisé pour récupérer des informations d' identification frais pour les opérations sensibles qui exigent une connexion récente.

    Rapide

        Auth().currentUser.reauthenticateWithCredential(withCredential: credential) { authResult, error in
          if error != nil {
            // Handle error.
          }
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
          // Additional OAuth access token is can also be retrieved by:
          // authResult.credential.accessToken
          // GitHub OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
        }
        

    Objectif c

        [[FIRAuth auth].currentUser
            reauthenticateWithCredential:credential
                              completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
          if (error) {
            // Handle error.
          }
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
          // Additional OAuth access token is can also be retrieved by:
          // authResult.credential.accessToken
          // GitHub OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
        }];
        

Prochaines étapes

Une fois qu'un utilisateur s'est connecté pour la première fois, un nouveau compte d'utilisateur est créé et lié aux informations d'identification, c'est-à-dire le nom d'utilisateur et le mot de passe, le numéro de téléphone ou les informations du fournisseur d'autorisation, avec lesquelles l'utilisateur s'est connecté. Ce nouveau compte est stocké dans le cadre de votre projet Firebase et peut être utilisé pour identifier un utilisateur dans chaque application de votre projet, quel que soit le mode de connexion de l'utilisateur.

  • Dans vos applications, vous pouvez obtenir des informations de profil de base de l'utilisateur du FIRUser objet. Voir Gérer les utilisateurs .

  • Dans votre base de données et en temps réel Firebase Cloud Storage Les règles de auth sécurité , vous pouvez obtenir la signature dans ID d'utilisateur unique de l' utilisateur de la auth variable et l' utiliser pour contrôler les données d' un accès utilisateur peut.

Vous pouvez permettre aux utilisateurs de se connecter à votre application à l' aide des fournisseurs d'authentification multiples en reliant auth des informations d' identification de fournisseur à un compte d'utilisateur existant.

Pour vous déconnecter un utilisateur, appelez signOut: .

Rapide

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

Objectif c

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

Vous pouvez également ajouter un code de gestion des erreurs pour la gamme complète des erreurs d'authentification. Voir les erreurs de poignée .