我正在使用 firebase 托管一个站点,并希望能够阻止人们访问它,尝试使用 .htaccess 文件,想知道是否有人以前能够做到这一点。
问问题
7057 次
2 回答
18
这是一个小技巧,它使用 Firebase 云功能和一些文件重新排列来模拟 HTTP 基本身份验证。
有3个步骤:
- 设置必要的云功能
- 将要保护的文件移动到“秘密”文件夹中
- 更新您的
firebase.json
1.云功能
const USERNAME = 'USERNAME'
const PASSWORD = 'PASSWORD'
const denyAccess = (res) => {
res.statusCode = 401;
res.setHeader('WWW-Authenticate', 'Basic realm="Authorization
Required');
res.end('Unauthorized');
}
exports.authorizeAccess = functions.https.onRequest((req, res) => {
if (typeof req.headers.authorization !== 'string') {
denyAccess(res);
return;
}
const base64Auth = req.headers.authorization.split(' ')[1];
if (typeof base64Auth !== 'string' ) {
denyAccess(res);
return;
}
const [user, pass] = Buffer.from(base64Auth,
'base64').toString().split(':');
if (user !== USERNAME || pass !== PASSWORD) {
denyAccess(res);
return;
}
const urlObject = url.parse(req.url);
urlObject.pathname =
`/${PASSWORD}${urlObject.pathname}`;
const location = url.format(urlObject);
res.writeHead(302, { location });
res.end();
});
2.将文件移动到秘密文件夹
假设您设置的文件夹如下所示public
:firebase.json
.
├── index.html
├── js
| ├── main.js
| └── main.js.map
└── styles.css
然后让它看起来像这样
.
└── PASSWORD
├── index.html
├── js
| ├── main.js
| └── main.js.map
└── styles.css
3.firebase.json
{
...
"rewrites": {
"source": "/"
"function": "authorizeAccess"
}
...
}
我们必须在生产中使用密码保护我们的源映射;我们必须首先把它们放在那里,这样哨兵才能把它捡起来。我们的构建脚本会负责将文件移动到必要的文件夹中。
于 2018-01-30T10:37:42.537 回答
5
如果您正在托管一个网站,并且想要访问您网站上的 Firebase 数据,您可以向您的应用程序添加身份验证以控制谁可以更改或查看数据。根据手册: Firebase Authentication
于 2015-07-09T21:01:12.307 回答