[英]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.