LoginSignup
10
15

More than 5 years have passed since last update.

Firebase で無料認証サービスを試してみた

Posted at

無料でID管理ができる時代。そろそろ覚えないといけないと思った。

事前準備(Webブラウザで実行)

  • Firebase コンソール でプロフェクトを作成
  • DEVELOP> Authentication に遷移
  • 「SIGN-IN METHOD」タブで、パスワード認証を Enable にして
  • 「USERS」タブで、以下の実験で使うユーザを作成

Project Overview の設定アイコンから、以下を控える

  • Project ID
  • Web API Key

クライアント側

とりあえず Nodeで確かめたけど、ブラウザのJSでもほぼ手順は同様

まずは、SDKのインストール

npm i --save firebase

// browserの場合
// <script src="https://www.gstatic.com/firebasejs/4.10.1/firebase.js"></script>

SDKを初期化したら、ID(メールアドレス)とパスワードでログインして、JWTトークンを得る。

const firebase = require('firebase');

(async () => {
  // initialize SDK
  const config = {
    apiKey: 'XXXXXXXXXXXXXXXXXXXXXX',
    authDomain: 'XXXXXXXXXX.firebaseapp.com', // project ID
  };
  const app = firebase.initializeApp(config);

  // authentication
  const auth = app.auth();
  const email = 'XXXXXXXXXXX@XXXXXXXXXX.com';
  const password = 'XXXXXXXXXXX';
  await auth.signInWithEmailAndPassword(email, password).catch(console.log);
  const me = auth.currentUser;
  console.log(me.email, me.emailVerified);

  // retrieve JWT
  const token = await me.getIdToken();
  console.log(token);
})();

サーバ側

Firebase コンソール でサービスアカウントを作成

  • Project Overview の設定アイコンから設定画面に遷移
  • SERVICE ACCOUNTS タブからGENERATE NEW KEYをする
    • JSONがダウンロードされる。これは公開しちゃダメなファイル

アドミン用のSDKをインストール

npm i --save firebase-admin

クライアントの生成したJWTをバリデーションする。

const admin = require('firebase-admin');
const account = require('./key.json');

const token='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';

(async () => {
  // initialize SDK
  const credential = admin.credential.cert(account);
  const app = admin.initializeApp({ credential });

  // verify
  const auth = app.auth();
  const decoded = await auth.verifyIdToken(token).catch(console.log);
  console.log(decoded.uid, decoded.email);
})();

IDとしては、 uid を用いるのがよい。

補足

クライアント側のコードを書くのがめんどくさい場合は、firebase/firebaseui-web が使える。デモサイト がある。

無料枠: https://firebase.google.com/pricing/ つまりは無制限ってことでいいのかな。

10
15
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
10
15