firebase托管的身份验证

时间:2018-02-12 19:07:27

标签: firebase firebase-realtime-database firebase-authentication firebase-hosting firebase-security-rules

我在Firebase托管上托管了一个静态应用,其后端也在Firebase上(使用firebase JS api进行通信)。我想在本网站的所有页面上添加一个简单的身份验证页面,以便只有我想要的用户才能访问此站点。这可能吗?

查看文档,但在这方面没有找到任何可以帮助我的内容。

3 个答案:

答案 0 :(得分:4)

您可以使用Firebase Functions和Express调用来执行此操作。将所有静态文件放入名为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)
  }
})

然后,向您的功能服务器发出的get_user()请求将提供相同名称的文件。

如果要添加授权,请尝试以下操作:

is_admin

您将必须定义'static' in request.endpoint,以便它返回带有"Static Joe" --slugifys--> /usr/profiles/static_joe字段的用户对象。

答案 1 :(得分:3)

Firebase Hosting无法限制对您网站的静态资源(HTML,CSS,JavaScript)的访问。请参阅Can Firebase hosting restrict access to resources?Firebase Hosting - Members Only / Secured Webpages?

但是,如果您的网站提供动态内容(例如loads data from the Firebase Database from JavaScriptuploads images to Firebase Storage),您可以使用Firebase身份验证和服务器端安全规则(databasestorage)这些产品确保用户只能采取他们授权的行动。

答案 2 :(得分:1)

这可以通过向Firebase数据库添加规则来实现,只允许经过身份验证的用户进入您可以使用的网站:

// 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/