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

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

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

準備

  1. Firebase を iOS プロジェクトに追加しますPodfile に次のポッドをインクルードします。
    pod 'Firebase/Auth'
    
  2. GitHub でデベロッパー アプリケーションとしてアプリを登録し、アプリの OAuth 2.0 クライアント IDクライアント シークレットを取得します。
  3. GitHub 認証を有効にします。
    1. Firebase console で [認証] を開きます。
    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 サブクラスにインポートします。

    Objective-C

    @import Firebase;
    

    Swift

    import Firebase
    
  3. FIRApp 共有インスタンスを設定します。通常はアプリケーションの application:didFinishLaunchingWithOptions: メソッドを使用します。

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    

    Swift

    // 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 =
        FIRTwitterAuthProvider.credentialWithToken(accessToken)
    
  5. 最後に、Firebase 認証情報を使用して Firebase での認証を行います。

    Objective-C

    [[FIRAuth auth] signInWithCredential:credential
                              completion:^(FIRUser *user, NSError *error) {
                                // ...
                                  if (error) {
                                    // ...
                                    return;
                                  }
    

    Swift

    FIRAuth.auth()?.signIn(with: credential) { (user, error) in
      // ...
        if let error = error {
          // ...
          return
        }
    

次のステップ

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

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

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

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

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

Objective-C

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

Swift

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

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

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