【问题标题】:Restrict access to Firebase Hosting content限制对 Firebase 托管内容的访问
【发布时间】:2021-08-01 12:45:30
【问题描述】:

我正在 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 express google-cloud-functions firebase-hosting


【解决方案1】:

您将在这个官方 Cloud Functions sample 中找到您需要的一切,它显示了“如何验证对 JSON API 的访问以仅允许特定 Firebase 用户访问数据”。

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

【讨论】:

  • 谢谢@Renaud,但我的问题是让 cloudfunction 访问“公共”托管文件夹:我不断收到 404,也在 cloudfunction 日志中。
  • 如果你通过云函数生成“静态”文件应该没问题。动态生成静态文件似乎很奇怪,但使用 Firebase 托管,我认为这是完成您正在寻找的事情的唯一方法。
【解决方案2】:

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

我把它贴在这里,也许它对其他人有用。

  • 我将“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/ 仅向经过身份验证的访问者提供我的静态内容。

【讨论】:

    猜你喜欢
    • 2019-02-26
    • 1970-01-01
    • 2015-01-28
    • 2018-11-21
    • 2021-01-16
    相关资源
    最近更新 更多