0件ヒットしました

    Firebaseでbasic認証をかける方法

    ポートフォリオをホスティングするのにbasic認証をかけたいなと思ったんですが、Netlifyの無料プランでは無理みたいだったので、はじめてFirebaseを使ってみましたemoji-fire

    デプロイまでの手順や、つまったところをメモしておこうと思います。

    デプロイまでの手順

    firebaseにアカウント登録&プロジェクトを作っておく

    アカウント登録してから、トップページからプロジェクトを追加しておきます。

    firebase-toolsをインストール

    npm経由でfirebase-toolsをインストールします。

    $ npm install -g firebase-tools

    firebaseにログイン

    $ firebase login

    ブラウザが立ち上がるので認証ボタンをクリック!これでログイン完了です。

    firebaseプロジェクトの初期化

    適当にフォルダを作ってそこにターミナルで移動してから、firebaseプロジェクトの初期化をします。

    $ firebase init

    FunctionsとHostingにスペースキーでチェックを入れます。

    いろいろ聞かれますが、基本はデフォルトのままでOK。

    プロジェクトを聞かれた時に、最初にFirebaseサイトから追加したプロジェクトを選択します。

    ファイルを書き換える

    以下の内容にファイルを書き換えます。

    functions/index.js

    const functions = require('firebase-functions')
    const express = require('express')
    const basicAuth = require('basic-auth-connect')
    const app = express()
    
    app.all('/*', basicAuth(function(user, password) {
      return user === 'username' && password === 'password';
    }));
    
    app.use(express.static(__dirname + '/static/'))
    
    exports.app = functions.https.onRequest(app)

    firebase.json

    {
      "hosting": {
        "public": "public",
        "rewrites": [
          {
            "source": "**",
            "function": "app"
          }
        ],
        "ignore": [
          "firebase.json",
          "**/.*",
          "**/node_modules/**"
        ]
      }
    }

    コマンドから必要なプラグインのインストール

    functionsフォルダに移動してから、必要なプラグインをインストールします。

    $ cd functions
    $ npm install --save express
    $ npm install --save basic-auth-connect

    Publicフォルダ内のファイルを全て削除して、staticフォルダを追加

    publicフォルダ内が空だった時、独自の静的ファイル(static)のホスティングを行うという設定を上記のfirebase.jsonとfunctions/index.js内でしているので、publicフォルダ内を空っぽにして、functionsフォルダの中にstaticフォルダを作って、staticフォルダ以下にホストしたいファイルを置いておきます。

    デプロイする

    firebase deploy

    しばらく待って、Deploy complete!が表示されればデプロイ完了です🎉

    詰まったところ

    1: deployが失敗する(TypeError: Cannot read property ‘wanted’ of undefined)

    手順通りにデプロイを行いましたが、TypeError: Cannot read property 'wanted' of undefinedというエラーがでてしまい、デプロイが完了しませんでした。

    私の場合はnpmを最新バージョン(6.10.0)にアップグレードしていたのが原因で、6.9.2にダウングレードすると問題なくデプロイが完了しました。以下のコマンドでダウングレードできます。

    $ npm install -g npm@6.9.2

    あとデプロイ時にエラーが出た場合、firebase-debug.logというファイルが同階層に生成されて、その中に詳しいエラーの原因が書かれているので、何かエラーが出た場合はこちらを参考にするとよさそうです。

    2: CANNOT GET/が表示される

    functionsフォルダと同じ階層にstaticフォルダを作っていたのが原因でした😱

    functions/index.js内の__dirnameはfunctionsフォルダまでの階層を表しているので、functionsフォルダの中にstaticフォルダを置くように気をつけましょう!(自戒)

    参考

    以下の記事を参考にさせていただきました🙏

    https://qiita.com/567000/items/65f55eda8d7c6df09138

    https://qiita.com/ohana/items/f334c096727740f0df4a