LoginSignup
8
9

More than 5 years have passed since last update.

HTMLファイル1つでFirebaseのGithub認証

Posted at

HTML

index.html
<!DOCTYPE html>
<body>
  <p id="message"><!-- hello, *** --></p>
  <button id="signin">signin</button>
  <button id="signout">signout</button>

  <!-- 依存 -->
  <script src="https://www.gstatic.com/firebasejs/4.6.0/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/4.6.0/firebase-auth.js"></script>

  <!-- メイン処理 -->
  <script>
document.addEventListener('DOMContentLoaded', () => {
  const config = {
    apiKey: '<api-key>',
    authDomain: '<project-name>.firebaseapp.com'
  };
  firebase.initializeApp(config);

  const provider = new firebase.auth.GithubAuthProvider();

  /**
   * `firebase.auth().signInWithRedirect`から戻ってきた時に
   * 問題なければ`then`で`user`や`accessToken`が渡ってくる
   */
  (async () => {
    try {
      const {user, credential} = await firebase.auth().getRedirectResult();
      /* 何か... */
    } catch (err) {
      /* エラー時の処理 */
    }
  })();

  /**
   * ログインユーザーが変わったら発火
   */
  firebase.auth().onAuthStateChanged(user => {
    if (user) {
      document.getElementById('message').innerHTML = `hello, ${user.displayName}`;

      /**
       * ログイン中なのでログアウトできるように
       */
      document.getElementById('signout').addEventListener('click', async () => {
        try {
          await firebase.auth().signOut();
        } catch (_) {
          /* エラー時の処理 */
        }
      });
    } else {
      document.getElementById('message').innerText = '';

      /**
       * ログインまだなので、クリックでログインできるように
       */
      document.getElementById('signin').addEventListener('click', () => {
        firebase.auth().signInWithRedirect(provider);
      });
    }
  });
});
  </script>
</body>

Gif

Kapture 2017-10-25 at 11.01.15.gif

ちょっと補足

依存

ここでは認証しか使ってないのでファイルサイズを減らすために個別に読み込むようにしてますが、Firebaseが提供する機能をすべて使いたい場合は、

<script src="https://www.gstatic.com/firebasejs/*.*.*/firebase.js"></script>

だけでもいけます。これは、

<script src="https://www.gstatic.com/firebasejs/*.*.*/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/*.*.*/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/*.*.*/firebase-database.js"></script>
<script src="https://www.gstatic.com/firebasejs/*.*.*/firebase-messaging.js"></script>

と同じようです。

メイン処理

Firebaseの機能を使うには、まずはじめに必ずfirebase.initializeApp(config)が必要です。(じゃないとfirebase.auth()とかでエラーになります)

APIキーの確認

歯車から「プロジェクトの設定」に載ってます。

Githubで「OAuth Apps」を作る

new firebase.auth.GithubAuthProvider()する為に必要です。

登録後に出てくる「Client ID」と「Client Secret」をGithubのAuth設定のフォームにコピペします。

コールバックはGithubの方にコピペしてください。

ログインしてるかどうかの確認

firebase.auth().onAuthStateChanged(...)をしておくとユーザーがログインしていればそのユーザー情報が渡ってきますし、していなければnullが回ってくるので、これを使って判断することができます。

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9