[Firebase] AuthenticationでFacebook認証 (Web編)

Firebaseへメールアドレス認証Twitter認証匿名認証と続き、今回はfacebookでの認証に挑戦します。

Authenticationでfacebookログイン

Facebookアプリを作成する際に、実際に本番で利用するためには「プライバシーポリシー」が掲載されたURLが必要になります。開発段階では不要ですが公開を考えている場合には早めに用意しておくことをおすすめします。

facebookでデベロッパー登録

Facebookにログインし、開発者サイトから登録を行います。 developers.facebook.com

登録する手順も書こうと思ったのですが、10年以上前に登録を終えてしまっていたためここでは割愛します。FacebookはTwitterと違って複数のアカウントが作れない(作りづらい)のですよね(´・ω・`)

facebookアプリを作成

開発者サイトの右上のメニュー「マイアプリ」→「新しいアプリを追加する」をクリック

アプリの名称とメールアドレスを入力し「アプリIDを作成してください」をクリック

自分がロボットではないか、非常に哲学的な質問を受けますが、生身の人間であると確信を持っている方はチェックし「送信する」ボタンをクリック。

ダッシュボード的な画面になりますので、左側のメニュー「設定」→「ベーシック」にある赤枠で囲まれた項目を追加で入力していきます。アプリIDapp sercretはFirebaseへ入力しますのでどこかにメモします。secretは絶対に他の人には知られないよう取り扱いにはご注意を。現段階ではプライバシーポリシーのURLの入力は必須ではありませんが、すでに存在している場合は入れておきます。

以下の画面が表示された場合は「Facebookログインを統合します」をクリック。もしくはダッシュボード画面上に「製品を追加」という欄に「Facebookログイン」があれば「設定」ボタンをクリックします。

「有効なOAuthリダイレクトURI」を入力する必要がありますが、この画面まで来たらFirebaseのWebコンソールへ戻ります。

Firebase Webコンソールの設定

FirebaseのWebコンソールへログインしたら、メニュー「Authentication」→「ログイン方法」とたどります。

画面の真ん中あたりにある「Facebook」のアコーディオンメニューを開き、「有効にする」にチェックしたあと

  1. 「OAuthリダイレクトURI」をFacebookのアプリ作成画面にコピー
  2. Facebookの設定画面に表示されていたアプリIDapp sercretをこの画面に入力

最後に「保存」をクリックすれば作業完了です。

ソースコード

config.js

いつものやつです。FirebaseのWebコンソールに表示されたものをそのままコピペします。

// コンソールの内容をそのままコピペ
var config = {
  apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  authDomain: "test-f76bc.firebaseapp.com",
  databaseURL: "https://test-f76bc.firebaseio.com",
  projectId: "test-f76bc",
  storageBucket: "test-f76bc.appspot.com",
  messagingSenderId: "0000000000000"
};
firebase.initializeApp(config);

index.html

FirebaseUIを利用します。Twitterの時と同様にsignInOptionsfirebase.auth.FacebookAuthProvider.PROVIDER_IDを指定します。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Firebase Auth for Facebook</title>
  <link type="text/css" rel="stylesheet" href="https://cdn.firebase.com/libs/firebaseui/3.5.2/firebaseui.css" />
  <style>h1{text-align: center;}</style>
</head>
<body>
  <h1>Firebase Auth for Facebook</h1>
  <div id="firebaseui-auth-container"></div>

  <script src="https://www.gstatic.com/firebasejs/5.8.1/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/5.8.1/firebase-auth.js"></script>
  <script src="https://www.gstatic.com/firebasejs/ui/3.5.2/firebase-ui-auth__ja.js"></script>
  <script src="/js/config.js"></script>
  <script>
    //----------------------------------------------
    // Firebase UIの設定
    //----------------------------------------------
    var uiConfig = {
        // ログイン完了時のリダイレクト先
        signInSuccessUrl: '/auth/facebook/done.html',

        // 利用する認証機能
        signInOptions: [
          firebase.auth.FacebookAuthProvider.PROVIDER_ID
        ],

        // 利用規約のURL(任意で設定)
        tosUrl: 'http://example.com/kiyaku/',
        // プライバシーポリシーのURL(任意で設定)
        privacyPolicyUrl: 'https://miku3.net/privacy.html'
      };

      var ui = new firebaseui.auth.AuthUI(firebase.auth());
      ui.start('#firebaseui-auth-container', uiConfig);
  </script>
</body>
</html>

done.html

ログイン完了時に表示される画面です。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Firebase Auth for Facebook</title>
</head>
<body>
  <h1>...Please wait</h1>
  <div id="info"></div>

  <script src="https://www.gstatic.com/firebasejs/5.8.1/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/5.8.1/firebase-auth.js"></script>
  <script src="/js/config.js"></script>
  <script>
    firebase.auth().onAuthStateChanged( (user) => {
      let h1   = document.querySelector('h1');
      let info = document.querySelector('#info');

      if(user) {
        h1.innerText   = 'Login Complete!';
        info.innerHTML = `${user.displayName}さんがログインしました<br>` +
                         `(${user.uid})`;
        console.log(user);
      }
      else {
        h1.innerText = 'Not Login';
      }
    });
  </script>
</body>
</html>

実行結果

実際にログインを試せます。 miku3.net

Webコンソールでの表示は以下のようになります。

Facebookアプリを本番公開

現状のアプリは「開発モード」になっており、アプリを作成した本人か特定のユーザーしか利用することができません。そこで本番に公開する作業が必要になります。

ダッシュボードの画面右上にある以下の箇所の「オフ」をクリック

「承認」ボタンをクリック

以下のように「オン」となれば完了です。

参考ページ

firebase.google.com github.com