繁体   English   中英

使用 JavaScript 的 Firebase Realtime Rest API

[英]Firebase Realtime Rest API with JavaScript

Firebase 文档有一些有用的 curl 操作,但没有提供有关使用 JS Fetch 的 Cors、标头和身份验证的信息。 我们正在使用 fetch-only 解决方案,因为我正在创建一个基于客户端的 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())

参考:

文档说您需要在查询参数'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=<ID_TOKEN> 查询字符串参数传递” 相同的示例 curl 请求将是:

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

此请求按预期工作。

关于 CORS, 这个答案说,

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 令牌。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM