iOS でカスタム認証システムを使用して Firebase 認証を行う

ユーザーがログインに成功したときに署名済みのカスタム トークンが生成されるように認証サーバーを変更することで、Firebase Authentication をカスタム認証システムと統合できます。アプリはこのトークンを受信して、Firebase での認証に使用します。

準備

  1. Firebase を iOS プロジェクトに追加します
  2. Podfile に次のポッドをインクルードします。
     verbatim 69c2a21022e657d9f2ea355fa969894c pod 'Firebase/Auth' endverbatim 69c2a21022e657d9f2ea355fa969894c 
    
  3. プロジェクトのサーバーキーを取得します。
    1. プロジェクトの設定の [サービス アカウント] ページに移動します。
    2. [サービス アカウント] ページの [Firebase Admin SDK] セクションの一番下にある [新しい秘密鍵を生成] をクリックします。
    3. 新しいサービス アカウントの公開鍵と秘密鍵のペアが、お使いのパソコンに自動的に保存されます。認証サーバーにこのファイルをコピーします。

Firebase で認証する

  1. UIApplicationDelegate サブクラスで Firebase モジュールをインポートします。

    Objective-C

    @import Firebase;
    

    Swift

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

    Objective-C

     verbatim f4837415eb98478ae53b9bc9796b0226 // Use Firebase library to configure APIs
    [FIRApp configure]; endverbatim f4837415eb98478ae53b9bc9796b0226 
    

    Swift

     verbatim 2ac23ab3ab1009da8a019fb5469208e7 // Use Firebase library to configure APIs
    FIRApp.configure() endverbatim 2ac23ab3ab1009da8a019fb5469208e7 
    
  3. ユーザーがアプリにログインしたら、そのユーザーのログイン認証情報(たとえば、ユーザー名とパスワード)を認証サーバーに送信します。サーバーにより認証情報が確認され、認証情報が有効な場合は、カスタム トークンが返されます。
  4. 認証サーバーからカスタム トークンを受信したら、signInWithCustomToken に渡してユーザーのログインを行います。

    Objective-C

     verbatim 82e0b32e339782357d0d5dc65959a1a3 [[FIRAuth auth] signInWithCustomToken:customToken
                               completion:^(FIRUser *_Nullable user,
                                            NSError *_Nullable error) {
                                 // ...
                               }]; endverbatim 82e0b32e339782357d0d5dc65959a1a3 

    Swift

     verbatim 408dde48e571625d1853c8174eab894b FIRAuth.auth()?.signIn(withCustomToken: customToken ?? "") { (user, error) in
      // ...
    } endverbatim 408dde48e571625d1853c8174eab894b 

次のステップ

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

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

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

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

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

Objective-C

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

Swift

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

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

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