iOS で GitHub を使用して認証する

GitHub 認証をアプリに統合して、ユーザーが Firebase での認証に GitHub アカウントを使用できるようにすることができます。

認証されたユーザーは、対象ユーザーが制限された Firebase Realtime Database と Cloud Storage のデータにアクセスできます。

準備

  1. Firebase を iOS プロジェクトに追加しますPodfile に次のポッドをインクルードします。
    pod 'Firebase/Auth'
    
  2. GitHub でデベロッパー アプリケーションとしてアプリを登録し、アプリの OAuth 2.0 クライアント IDクライアント シークレットを取得します。
  3. GitHub 認証を有効にします。
    1. Firebase コンソールで [Auth] セクションを開きます。
    2. [ログイン方法] タブで [GitHub] を有効にし、GitHub から取得した OAuth 2.0 の [クライアント ID] と [クライアント シークレット] を指定します。
    3. 次に、Firebase OAuth リダイレクト URImy-app-12345.firebaseapp.com/__/auth/handler など)を、GitHub アプリの設定にあるアプリ設定ページで認証コールバック URL として設定します。

Firebase で認証する

  1. デベロッパー向けドキュメントに沿って GitHub 認証をアプリに統合します。ウェブ アプリケーション フローを使用して、GitHub からの OAuth 2.0 コールバックを処理するカスタム URL スキームをアプリに設定します。GitHub のログインフローの最後に OAuth 2.0 アクセス トークンを受け取ります。
  2. Firebase モジュールを UIApplicationDelegate サブクラスにインポートします。

    Swift

    import Firebase
    

    Objective-C

    @import Firebase;
    
  3. FIRApp 共有インスタンスを設定します。これは通常、アプリケーションの application:didFinishLaunchingWithOptions: メソッドで行います。

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  4. ユーザーが GitHub でのログインに成功したら、didCompleteWithResult:error: の実装で、GitHub からの OAuth 2.0 アクセス トークンを Firebase 認証情報と交換します。

    Objective-C

    FIRAuthCredential *credential =
        [FIRGitHubAuthProvider credentialWithToken:accessToken];
    

    Swift

    let credential =
        GitHubAuthProvider.credential(withToken: accessToken)
    
  5. 最後に、Firebase 認証情報を使用して Firebase での認証を行います。

    Objective-C

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

    Swift

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

次のステップ

ユーザーが初めてログインすると、新しいユーザー アカウントが作成され、ユーザーがログインに使用した認証情報(ユーザー名とパスワード、電話番号、または認証プロバイダ情報)にアカウントがリンクされます。この新しいアカウントは Firebase プロジェクトの一部として保存され、ユーザーのログイン方法にかかわらず、プロジェクトのすべてのアプリでユーザーを識別するために使用できます。

  • アプリでは、FIRUser オブジェクトからユーザーの基本的なプロフィール情報を取得できます。ユーザーの管理についての記事をご覧ください。

  • Firebase Realtime Database と Cloud Storage のセキュリティ ルールでは、ログイン済みユーザーの一意のユーザー ID を auth 変数から取得し、それを使用してユーザーがアクセスできるデータを制御できます。

既存のユーザー アカウントに認証プロバイダの認証情報をリンクすることで、ユーザーが複数の認証プロバイダを使用してアプリにログインできるようになります。

ユーザーのログアウトを行うには signOut: を呼び出します。

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;
}

さまざまな認証エラーに対応できるようにエラー処理コードを追加することもできます。エラーの処理についての記事をご覧ください。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。