FirebaseでBasic認証をかけてサイトを作る(Hostingする)
FirebaseでBasic認証をかけてサイトを作る(Hostingする):
Firebaseが便利だと聞いたので、さくっとWebページのホスティングがしてみたい。
でもあんまり変なページは公開したくないので、できれば、Basic認証くらいかけたい。
できればWindowsでやりたい。
というときの手順のまとめ。
以降
Googleアカウントをとって、Firebaseのサイトにアクセスすれば、それほど悩まずにFireabaseのログインはできると思います。
その後トップページのプロジェクトの追加から、プロジェクトを作ります。
プロジェクト名に適当な名前をいれて、規約を読んでからGoogleのデータ共有などのチェックを付けたり/外したりして、プロジェクトの作成を行います。
Firebaseのサイトの手順などを見ていくと、
まず、
ここはあまり問題ないと思います。
次にFirebaseへのログインをします。
ここでもし会社の環境などでProxyを使っているならProxyの設定をしておきましょう。
Powershellを使って環境変数の設定を行います。
次にログインをします。
何か聞かれますが Enter で切るぬけると、ブラウザが立ち上がって、場合によってはGoogleのログイン画面などが出てきます。
さらに場合によっては、ハッシュみたいな文字列が出てくるので、それをコピーしてPowershell上に張り付けします。 出なかったらいいです。
これでログインできた状態になってくれます。
単なるHosting、つまりは、Webサーバーであれば
ではさっそく。
を実行すると、コンソール上でメニューが出てきます。
このメニューが出てきたらカーソル上下で選んで、スペースキーで
いくつか質問されますが基本はデフォルトのままで大丈夫です。
プロジェクトを聞かれる選択肢がありますが、最初の手順でFirebaseのサイト上で作ったプロジェクトが出てくるはずなので、それを選択しておきます。
こんな感じのファイル構成になっていると思います。
まず通常の
次に、
簡単にいってしまうと、すべてのリクエストに対して
上記の例だと、IDは
次に、実際にホスティングしたいファイルを置きます。
今回は楽がしたいので
こんな感じで作ってみます。
内容はなんでもいいのですがこんな感じで作ってみました。
次にルーティング的なものを設定します。
デフォルト作られたものに対して
準備は完了したのでついにデプロイです。
じゃなかったです。
Basic認証用にFunctionsにいろいろとライブラリを足したので
デプロイ作業のため、忘れないようにカレントフォルダも
そしてやっとデプロイです。
エラーがなければすんなりとデプロイされるはずです。
Deploy complete!
Firebaseのサイトのコンソール上からURLが確認できます。
メニューの
アクセスすると無事に認証が動きIDとパスワードがきかれるはずです。
コードで書いた通り
念のため
ということで無事にBasic認証をかけてのHostingが出来ました。
大きな流れで言うと、
この記事を書くために(じゃないですが)、"デカビタC(缶)"と"たけのこの里"を残して言ってくれた同僚に感謝です。
m__m
Firebaseで簡易サーバをたてたい
Firebaseが便利だと聞いたので、さくっとWebページのホスティングがしてみたい。でもあんまり変なページは公開したくないので、できれば、Basic認証くらいかけたい。
できればWindowsでやりたい。
というときの手順のまとめ。
どのプロンプトを使うか?
Powershellでいきます。以降
Powershell上で実行してください。Macだと悩むことないのですがWindowsだといつも悩む、何のコンソールを使うか?問題です。 最初は、Migw(Git-bash)でやろうとしたのですが、いろいろとスムーズにいかないところがあって、試行錯誤の結果 Powershell になりました。
Firebaseのアカウント作成からサイト上での準備
Googleアカウントをとって、Firebaseのサイトにアクセスすれば、それほど悩まずにFireabaseのログインはできると思います。その後トップページのプロジェクトの追加から、プロジェクトを作ります。
プロジェクト名に適当な名前をいれて、規約を読んでからGoogleのデータ共有などのチェックを付けたり/外したりして、プロジェクトの作成を行います。
個人的には、この手のチェックは ON でいいと思います。
Googleなどに価値ある情報を提供して、Googleが良いサービスを作ってくれたらソフトウェア業界の進歩につながるので、1エンジニアとしては統計的情報の提供くらいなら喜んでさしあげます。
FirebaseセットアップからDeployまで
Firebaseのサイトの手順などを見ていくと、npm のコマンド等がでてきますのでそれにしたがってやれば良いだけです。と言いつつ、つまづくところがあるので下記順に見ていきます。まず、
firebaseコマンドを使えるようにするためfirebase-toolsをインストールします。ここはあまり問題ないと思います。
> npm install -g firebase-tools
ここでもし会社の環境などでProxyを使っているならProxyの設定をしておきましょう。
Powershellを使って環境変数の設定を行います。
> $Env:https_proxy = "http://xxxx" > $Env:https_proxy = "http://xxxx"
> firebase login
さらに場合によっては、ハッシュみたいな文字列が出てくるので、それをコピーしてPowershell上に張り付けします。 出なかったらいいです。
これでログインできた状態になってくれます。
ここがMingw(Git-bash)の場合だと色々エラーがでたり、Proxy未設定の場合にエラーがでたり、と山場になりますが、Powershell使って行えば意外とスムーズにいってしまいます。 わたしはここで丸1日つぶしました;;次に初期設定をします。
単なるHosting、つまりは、Webサーバーであれば
Hostingとして初期設定を行いますが、今回はBasic認証をかけたいがためにFunctionsも追加したプロジェクトを作ります。Functionsとして作ってNode.js ExpressからBasic認証をかけるという作戦です。ではさっそく。
> firebase init
ExperimentalWarning: The fs.promises API is experimental
######## #### ######## ######## ######## ### ###### ########
## ## ## ## ## ## ## ## ## ## ##
###### ## ######## ###### ######## ######### ###### ######
## ## ## ## ## ## ## ## ## ## ##
## #### ## ## ######## ######## ## ## ###### ########
...中略...
>( ) Database: Deploy Firebase Realtime Database Rules
( ) Firestore: Deploy rules and create indexes for Firestore
(*) Functions: Configure and deploy Cloud Functions
(*) Hosting: Configure and deploy Firebase Hosting sites
( ) Storage: Deploy Cloud Storage security rules
HostingとFunctionsにチェックをつけてからEnterを押します。いくつか質問されますが基本はデフォルトのままで大丈夫です。
プロジェクトを聞かれる選択肢がありますが、最初の手順でFirebaseのサイト上で作ったプロジェクトが出てくるはずなので、それを選択しておきます。
JavaScriptかTypescriptか聞かれるところもありますが、今回の記事ではJavaScriptを使ってます。Typescriptを使いたい場合はそちらを選択して、サンプルコードも読み変えてください。このあとしばらくするとプロジェクトのファイル一式が作られます。
こんな感じのファイル構成になっていると思います。
functions/ public/ .firebaserc .gitignore firebase.json
Basic認証をかけつつ静的ファイルのHostingを行う
まず通常のHostingでファイルが認証なしでホスティングされないようにpublicの下のファイルを消してしまいます。フォルダは残しておいてください。次に、
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 === 'hoge' && password === 'hogehoge';
}));
app.use(express.static(__dirname + '/static/'))
exports.app = functions.https.onRequest(app)
basicAuthを適用して認証を行うようにしてから、./static/の静的ファイルのホスティングを行うようにしています。上記の例だと、IDは
hogeで、パスワードはhogehogeになりますので、適宜書き換えてください。次に、実際にホスティングしたいファイルを置きます。
今回は楽がしたいので
functionsの下にstaticというフォルダを作って置いてしまいます。functions/
+- static/ ←ここ
+- index.html
+- index2.html
public/
.firebaserc
.gitignore
firebase.json
内容はなんでもいいのですがこんな感じで作ってみました。
index.html
I am index.html.
index2.html
I am index2.html.
デフォルト作られたものに対して
rewritesを足します。すべてのリクエストをappというFunctionsの機能にリダイレクトする設定です。{
"hosting": {
"public": "public",
"rewrites": [
{
"source": "**",
"function": "app"
}
],
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
}
じゃなかったです。
Basic認証用にFunctionsにいろいろとライブラリを足したので
npm installが必要です。functionsフォルダにcdしてから、必要なライブラリをnpm installします。デプロイ作業のため、忘れないようにカレントフォルダも
cd ..で戻しておきます。> cd functions > npm install --save express > npm install --save basic-auth-connect > cd ..
> firebase deploy
Deploy complete!
確認
Firebaseのサイトのコンソール上からURLが確認できます。メニューの
Hostingあたりから見れます。アクセスすると無事に認証が動きIDとパスワードがきかれるはずです。
コードで書いた通り
hoge hogehoge を入れるとブラウザ上には I am index.html. が表示されるはずです。念のため
https://......../index2.html と直指定でURLを入れた場合も確認してみますが、無事に認証がかかってファイルがみれると思います。※上で認証済みならプライベートウィンドウなどひらいて確認してみてください。
まとめ
ということで無事にBasic認証をかけてのHostingが出来ました。大きな流れで言うと、
- Firebaseを普通にHosting + Functionsで設定をする
- Hostingのファイルを空にする
- Functions(≒Express)ですべてのアクセスにBasic認証をかける
- Functions(≒Express)で独自の静的ファイルのホスティングを行う
謝辞
この記事を書くために(じゃないですが)、"デカビタC(缶)"と"たけのこの里"を残して言ってくれた同僚に感謝です。m__m
コメント
コメントを投稿