限制对 Firebase 托管内容的访问

问题描述 投票:0回答:2

我正在 firebase 上构建一组 REST API。 我已经生成了带有 swagger (对于“外部”文档)和 jsdoc (对于“内部”文档)的文档。因此,从 jsdoc,我有一堆 HTML 页面,我想将它们部署到 FB 托管上,但我想将这些页面的访问限制为仅某些经过身份验证的用户。

对于动态内容,例如swagger- generated,我很容易解决如下。

doc_fun.use(
  '/rest',
  basicAuth({
    users: {'user': 'password'},
    challenge: true,
  }),
  swaggerUi.serve,
  swaggerUi.setup(swaggerSpec)
)
exports.docs = functions.https.onRequest(doc_fun)

我正在寻找(可能类似)静态内容的解决方案。比如:

doc_fun.use(
  '/jsdoc', 
  basicAuth({
    users: {'user': 'password'},
    challenge: true,
  }), 
  express.static('public/jsdoc')
)

(当然,这是行不通的)

node.js firebase google-cloud-platform google-cloud-functions firebase-hosting
2个回答
1
投票

您将在此官方 Cloud Functions sample 中找到所需的一切,其中展示了“如何对 JSON API 的访问进行身份验证以仅允许特定 Firebase 用户访问数据”。

更准确地说,它展示了 Express 中间件如何“验证在授权 HTTP 标头中传递的 Firebase ID 令牌”。


1
投票

受到雷诺最后评论的启发,我设法找到了一个简单的解决方法。

我将其发布在这里,也许对其他人有用。

  • 我将“jsdoc”文件夹及其所有 HTML 静态内容放在“functions”文件夹中
  • 我已将express.static路径参数设置为'./jsdoc'

index.js:

doc_fun.use(
  '/jsdoc', 
   basicAuth({
     users: {'user': 'password'},
     challenge: true,
   }), 
   express.static('./jsdoc') //current folder is 'functions'
 )

firebase.json:

...,
"rewrites": [
  ...,
  {
    "source": "/docs/**",
    "function": "docs"
  }
],
...

现在

http://my_project.cloudfunctions.net/docs/jsdoc/
仅向经过身份验证的访问者提供我的静态内容。

© www.soinside.com 2019 - 2024. All rights reserved.