[node + express]Firebase Authenticationを導入してBearerトークン認証を実装するまで

Firebase Authenticationとは、「Googleに認証」などの外部サイトのログイン情報で良い感じに認証できる機能を、簡単に実装できるサービスです。

今回はこれのサーバ側、つまり「クライアント側から渡されたトークンを検証する」機能の実装を行いたいと思います。ちなみに自分はFlutterでクライアント側を実装しています。

SDK導入

まずはSDKの導入。

npm install firebase-admin

次に設定ファイルをfirebaseのsettings->サービスアカウントからダウンロード。アプリケーションのルートに配置しました。

また、この時スニペットに書いてあるdatabaseURLも控えておきましょう。

そしてenvファイルに以下の値を追加。nodeで.envを使える様にするにはこちらを参照。

GOOGLE_APPLICATION_CREDENTIALS=jsonファイルまでのフルパス.json
GOOGLE_APPLICATION_DATABASE=先ほど控えたdatabaseURL

GOOGLE_APPLICATION_CREDENTIALに関してはadminSDKが使うものです。下は後で使います。

その後、まずは初期化コードを実装。私はapp.jsに実装しました。

var admin = require('firebase-admin');
admin.initializeApp({
  credential: admin.credential.applicationDefault(),
  databaseURL: process.env.GOOGLE_APPLICATION_DATABASE
});

というのも初期化処理が複数回走るとエラーが出てしまうので、APIサーバ立てるならapp.jsで初期化するのが無難なのかなって感じです。

ここまででSDKの導入処理は完了です。

HTTPメソッド側変更

まず、SDKを使うためには各HTTPメソッドをasync,awaitに対応させる必要があります。
私は以下を基本形にしています。

router.get('/test', (req, res, next) => {
  (async () => {
    //色々処理してres.status().send();
  })().catch(next);
});

こうすると、firebase admin SDKの非同期な処理をawaitして良い感じに処理することができます。

実際にfirebaseにトークンを投げて認証結果を返してもらう処理がこちら。

var admin = require('firebase-admin');

async function verifyToken(token) {
    await admin.auth().verifyIdToken(token)
        .then(function (decodedToken) {
            return decodedToken.uid;
        }).catch(function (error) {
            console.log(error);
            return '';
        });
}

また、リクエストからBearerトークンを取り出す処理はこちら。

function getBearerToken(req) {
    let token = '';
    if (req.headers.authorization &&
        req.headers.authorization.split(' ')[0] === 'Bearer') {
        token = req.headers.authorization.split(' ')[1];
    }
    return token;
}

Bearer認証を使うと、「Bearer ◯◯◯~~」という風に、クライアントで設定した情報が渡されるので、それを分解しています。

まとめ

いろんな概念や考え方が出てきましたが、理解してしまえば問題なく実装できるレベルだと思います。

この認証が出来る・出来ないでかなり全体設計も変わってくると思うので、是非試していただければと思います。

レンタルサーバはConohaWINGが最強にオススメ!

muchilogでは今までいろんなレンタルサーバやSaaSを使ってきましたが、今では全てをConohaWINGにて運営しています。

■今まで使ってきたサービス一覧
・さくらレンタルサーバ(ベーシックプラン)
・カゴヤ
・Azure
・AWS

今ではこのブログは勿論、webサービスのバックエンドやアプリのサーバ機能もConohaWINGで動かしています。
そんなConohaWINGのメリットをいくつか紹介します!

【国内最速No.1】高性能レンタルサーバーConoHa WING

無料で最大2個の独自ドメインが使える!

サイト運営に必要な独自ドメインをなんと無料で取得することが可能です!これだけでも月100円以上は運営費が節約できます。

優れた速度と安定感

私がAzureやさくらを解約した大きな理由はこれ。Conohaは非常に安定して稼働しており、ダウンタイムがほぼ発生しません。発生した場合は潔くお知らせしてくれます。
また、このブログは勿論、バックエンドとして動いてるプログラムも処理速度が大幅に向上しました(体感で倍速以上)。 Azure等のSaaSからレンタルサーバに移行するって普通考えられませんよね?しかし実際に大きなメリットを感じているのです。

頻繁に開催されるキャンペーン

ConohaWINGは半額に迫るようなキャンペーンを頻繁に開催しています。このキャンペーンによって、性能的には業界トップクラスであるにも関わらず、 月額料金換算で最安値クラスで使えるのです。
基本的に長期一括契約の方がお得になるため、muchilogでは最長で契約することをオススメします。価格と性能のバランスを考えれば他に乗り換えることも考えれられませんし。

レンタルサーバは必須です!

web系のプログラミング学習を進める際には、レンタルサーバの契約は必須と思ってください。ローカルの環境と本番環境で動作が違うことは良くありますし、ポートフォリオを公開するのも大切です。

学習や制作に集中するためにも、満足度、速度、安定度全てのレベルが高いConohaWINGを最強にオススメします!

web系サービス開発会社に転職したい!

muchilogではIT系へ転職したいという方には「自社サービスを運営しているweb系企業」への転職をおすすめしています。

web系は「自由な社風」「成長できる環境」「ホワイトな労働条件」であることが多いからです。

そんなweb系企業への転職を確実にするためのプログラミングスクールが登場しました。


RUNTEQ

RUNTEQはただのスクールじゃない!

RUNTEQはweb系の開発会社。開発会社が運営するスクールなので必要とされる技術力は勿論習得可能。しかしそれだけではないのです。

特にweb系で転職・就職活動を行う際にはポートフォリオを求められることがあります。ポートフォリオとは自分自身の作品のことで、技術力や企画力を示すものです。

RUNTEQではポートフォリオの作成を企画段階からサポートしてくれます!

他のプログラミングスクールでは提携企業の派遣やアルバイトとして就職するしかなかったりもしますが、RUNTEQはあなたの市場価値を高める方法まで教えてくれるということですね。

また、RUNTEQが扱う教材はどれも第一線で当たり前に使われている技術。特に未経験者の独学ではどうしてもスキルセットに穴が出来てしまいます。その点RUNTEQは確実に現場力を養えます。

そして2020年2月〜2021年12月までの内定者の98%がweb系企業に内定しています。これはRUNTEQの指導力とサポートが優れていることの証拠でしょう。

まずは無料説明会に申し込んではいかがでしょうか?

RUNTEQ


express Firebase js
muchiをフォローする
MUCHILOG
タイトルとURLをコピーしました