Firebase 托管的身份验证
Authentication for firebase hosting
我有一个托管在 Firebase 主机上的静态应用程序,其后端也在 Firebase 上(使用 firebase JS api 进行通信)。我想给这个网站的所有页面添加一个简单的授权页面,这样只有我想要的用户才能访问这个网站。这可能吗?
查看了文档,但没有找到在这方面对我有帮助的任何内容。
Firebase 托管无法限制对您网站静态资源(HTML、CSS、JavaScript)的访问。参见 Can Firebase hosting restrict access to resources?, Firebase Hosting - Members Only / Secured Webpages?。
但是,如果您的网站提供这些产品的动态内容(例如 loads data from the Firebase Database from JavaScript, or uploads images to Firebase Storage) you can use Firebase Authentication plus the server-side security rules (database, storage)以确保用户只能执行他们获得授权的操作。
这可以通过向您的 Firebase 数据库添加规则来完成,只允许经过身份验证的用户进入您可以使用的网站:
// These rules require authentication
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
你可以使用这个:
{
"rules": {
"admin": {
"$uid": {
".write": "$uid === auth.uid"
}
}
}
}
使用上面的方法,您将只允许 admin
节点下的用户(他们必须经过身份验证)写入数据库,其他任何人都不能。
您可以使用 Firebase Functions 和 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)
}
})
您将必须定义 get_user()
以便 returns 具有 is_admin
字段的用户对象。
我有一个托管在 Firebase 主机上的静态应用程序,其后端也在 Firebase 上(使用 firebase JS api 进行通信)。我想给这个网站的所有页面添加一个简单的授权页面,这样只有我想要的用户才能访问这个网站。这可能吗?
查看了文档,但没有找到在这方面对我有帮助的任何内容。
Firebase 托管无法限制对您网站静态资源(HTML、CSS、JavaScript)的访问。参见 Can Firebase hosting restrict access to resources?, Firebase Hosting - Members Only / Secured Webpages?。
但是,如果您的网站提供这些产品的动态内容(例如 loads data from the Firebase Database from JavaScript, or uploads images to Firebase Storage) you can use Firebase Authentication plus the server-side security rules (database, storage)以确保用户只能执行他们获得授权的操作。
这可以通过向您的 Firebase 数据库添加规则来完成,只允许经过身份验证的用户进入您可以使用的网站:
// These rules require authentication
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
你可以使用这个:
{
"rules": {
"admin": {
"$uid": {
".write": "$uid === auth.uid"
}
}
}
}
使用上面的方法,您将只允许 admin
节点下的用户(他们必须经过身份验证)写入数据库,其他任何人都不能。
您可以使用 Firebase Functions 和 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)
}
})
您将必须定义 get_user()
以便 returns 具有 is_admin
字段的用户对象。