web-dev-qa-db-ja.com

Firebase Hostingの認証

Firebaseホスティングでホストされている静的アプリがあり、そのバックエンドもFirebaseにあります(firebase JS apiを使用して通信しています)。簡単な認証ページをこのWebサイトのすべてのページに追加して、必要なユーザーだけがこのサイトにアクセスできるようにしたいと考えています。これは可能ですか?

ドキュメントを調べましたが、この点で私を助けるものは何も見つかりませんでした。

8
ayushgp

これを行うには、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()を定義する必要があります。

9
Brent Washburne

Firebase Hostingでは、サイトの静的リソース(HTML、CSS、JavaScript)へのアクセスを制限する方法はありません。 Firebaseホスティングでリソースへのアクセスを制限できますか?Firebase Hosting-メンバー限定/保護されたWebページ? を参照してください。

ただし、サイトが動的コンテンツを提供している場合(例: JavaScriptからFirebaseデータベースからデータをロードする 、または 画像をFirebase Storageにアップロードする )、Firebase Authenticationとサーバー側のセキュリティを使用できますこれらの製品のルール( データベースストレージ )を使用して、ユーザーが許可されたアクションのみを実行できるようにします。

4

これを行うには、Firebaseデータベースにルールを追加して、認証されたユーザーだけが使用できるWebサイトにアクセスできるようにします。

// These rules require authentication
{
 "rules": {
   ".read": "auth != null",
   ".write": "auth != null"
 } 
}

あなたはこれを使うことができます:

 {
 "rules": {
   "admin": {
       "$uid": {
          ".write": "$uid === auth.uid"
      }
    }
  }
}

上記を使用すると、adminノードの下のユーザーのみ(認証が必要)にデータベースへの書き込みを許可し、他のユーザーには許可しません。

詳細はこちら: https://firebase.google.com/docs/database/security/

0
Peter Haddad