我正在使用firebase托管一个网站,并希望能够阻止人们访问它,尝试使用.htaccess文件,想知道是否有人之前能够这样做。
答案 0 :(得分:8)
这是一个使用firebase云功能和一些文件重新排列模拟HTTP Basic身份验证的小黑客。
这有三个步骤:
firebase.json
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();
});
假设您在public
中设置为firebase.json
的文件夹如下所示:
.
├── index.html
├── js
| ├── main.js
| └── main.js.map
└── styles.css
然后让它看起来像这样
.
└── PASSWORD
├── index.html
├── js
| ├── main.js
| └── main.js.map
└── styles.css
firebase.json
{
...
"rewrites": {
"source": "/"
"function": "authorizeAccess"
}
...
}
我们必须在生产中使用密码保护我们的源地图;我们必须首先将它们放在那里,以便Sentry能够把它拿起来。我们的构建脚本会将文件移动到必要的文件夹中。
答案 1 :(得分:3)
如果您要托管站点,并且想要访问站点上的firebase数据,则可以向应用程序添加身份验证,以控制谁可以更改或查看数据。根据手册:Firebase Authentication