【问题标题】:Firebase Realtime Rest API with JavaScript带有 JavaScript 的 Firebase Realtime Rest API
【发布时间】:2021-09-27 14:30:33
【问题描述】:

Firebase 文档有一些有用的 curl 操作,但没有提供有关 Cors、标头和使用 JS Fetch 的身份验证的信息。我们正在使用仅获取解决方案,因为我正在创建一个基于客户端的 Firebase npm 包,其中用户可能没有导入 firebase 模块,原因有多种,比如摇树、缩小项目等。

我想我需要将 Auth 作为标头传递,那么 Cors 和凭据呢?

这是一个粗略的例子,这就足够了吗?还是有其他不可预见的问题?

const pushOptions = {
    method: 'POST', // *GET, POST, PUT, DELETE, etc.
    mode: 'cors',
    credentials: 'same-origin',
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify(data)
}

var dataAPI = await fetch(databaseUrl+`/test.json`,pushOptions)
        .then(response => response.json())

参考:

【问题讨论】:

  • 为什么不提供一个缩小的 Firebase 身份验证模块,这样您就不必担心重新设计所有身份验证步骤,然后只需在相关请求上使用 Authorization: Bearer <firebase-id-token>
  • 因为我收到反馈建议仅为 REST API 构建它

标签: javascript firebase firebase-realtime-database rest


【解决方案1】:

documentation 表示您需要在查询参数 'access_token' 而不是任何标头中传递您的 Firebase ID。例如,

curl 'https://[PROJECT_ID].firebaseio/users/jack/name.json?access_token=CREDENTIAL'

但我最终得到了Unauthorized 错误。

但是,Firebase Auth REST API 文档中的 Authenticate with an ID Token 部分说,“将上面生成的 ID 令牌作为 auth= 查询字符串参数传递”。相同的示例 curl 请求将是:

curl 'https://[PROJECT_ID].firebaseio/users/jack/name.json?auth=CREDENTIAL'

此请求按预期工作。

关于 CORS,this answer 说,

Firebase 使用完全允许的跨域资源共享 (CORS) 政策,这意味着您可以从任何来源向 Firebase 服务器发出请求。这是可能的,因为 Firebase 不使用 cookie 或传统会话来管理哪些请求获得授权,哪些请求未获得授权。

这是一个使用 Javascript fetch 的工作示例:

firebase.auth().onAuthStateChanged(async (user) => {
  const token = await firebase.auth().currentUser.getIdToken()
  
  const pushOptions = {
    method: 'GET',
  }

  const reqURL = "https://[PROJECT_ID].firebaseio.com" + `/path.json?auth=${token}`
  const dataAPI = await fetch(reqURL, pushOptions)
      .then(response => response.json())
      .then(res => console.log(res))
})

我只是使用客户端 SDK 快速获取 ID 令牌,但无论令牌是从哪里生成的 - 客户端 SDK 或 Auth REST API,它都会起作用。

REST API 接受客户端 SDK 使用的相同 Firebase ID 令牌。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 2017-10-21
    相关资源
    最近更新 更多