Firebaseホスティングでホストされている静的アプリがあり、そのバックエンドもFirebaseにあります(firebase JS apiを使用して通信しています)。簡単な認証ページをこのWebサイトのすべてのページに追加して、必要なユーザーだけがこのサイトにアクセスできるようにしたいと考えています。これは可能ですか?
ドキュメントを調べましたが、この点で私を助けるものは何も見つかりませんでした。
これを行うには、Firebase関数とExpress呼び出しを使用します。すべての静的ファイルを_functions/admin
_という名前のフォルダーに入れ、この関数を_functions/index.js
_に入れます。
_exports.admin = functions.https.onRequest((req, res) => {
const url = req.originalUrl ? req.originalUrl : '/index.html' // default to index.html
res.sendfile('admin' + url)
})
_
次に、関数サーバーに_/admin/*
_を要求すると、同じ名前のファイルが提供されます。
承認を追加したい場合は、これを試してください:
_exports.admin = functions.https.onRequest(async (req, res) => {
const url = req.originalUrl ? req.originalUrl : '/index.html'
const user = await get_user(req) // get the current user
if (user && user.is_admin) // is current user an admin?
res.sendfile('admin' + url)
else {
res.status(403).send(null)
}
})
_
_is_admin
_フィールドを持つユーザーオブジェクトを返すように、get_user()
を定義する必要があります。
Firebase Hostingでは、サイトの静的リソース(HTML、CSS、JavaScript)へのアクセスを制限する方法はありません。 Firebaseホスティングでリソースへのアクセスを制限できますか? 、 Firebase Hosting-メンバー限定/保護されたWebページ? を参照してください。
ただし、サイトが動的コンテンツを提供している場合(例: JavaScriptからFirebaseデータベースからデータをロードする 、または 画像をFirebase Storageにアップロードする )、Firebase Authenticationとサーバー側のセキュリティを使用できますこれらの製品のルール( データベース 、 ストレージ )を使用して、ユーザーが許可されたアクションのみを実行できるようにします。
これを行うには、Firebaseデータベースにルールを追加して、認証されたユーザーだけが使用できるWebサイトにアクセスできるようにします。
// These rules require authentication
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
あなたはこれを使うことができます:
{
"rules": {
"admin": {
"$uid": {
".write": "$uid === auth.uid"
}
}
}
}
上記を使用すると、admin
ノードの下のユーザーのみ(認証が必要)にデータベースへの書き込みを許可し、他のユーザーには許可しません。