是否可以要求密码才能访问firebase上托管的网站?

时间:2015-07-09 16:46:29

标签: firebase firebase-hosting

我正在使用firebase托管一个网站,并希望能够阻止人们访问它,尝试使用.htaccess文件,想知道是否有人之前能够这样做。

2 个答案:

答案 0 :(得分:8)

这是一个使用firebase云功能和一些文件重新排列模拟HTTP Basic身份验证的小黑客。

这有三个步骤:

  1. 设置必要的云功能
  2. 将您要保护的文件移动到"秘密"夹
  3. 更新firebase.json
  4. 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"
      }
      ...
    }
    

    我们必须在生产中使用密码保护我们的源地图;我们必须首先将它们放在那里,以便Sentry能够把它拿起来。我们的构建脚本会将文件移动到必要的文件夹中。

答案 1 :(得分:3)

如果您要托管站点,并且想要访问站点上的firebase数据,则可以向应用程序添加身份验证,以控制谁可以更改或查看数据。根据手册:Firebase Authentication