angular - 从受 Firebase 规则保护的数据写入/读取时令牌的角度使用
问题描述
问题: 使用身份验证令牌从 Firebase 数据读取/写入的模型是什么?
长格式问题:我已成功登录 Firebase,并且我有一组身份验证令牌数据来响应该登录。我假设当我对 Firebase 文档执行 http.get() 或 http.patch() 时,我需要将该令牌传回。但我还没有弄清楚如何正确地做到这一点。
带角度的框架离子
设置 我已经建立了一个 Firebase 数据集,并设置了如下访问规则:
{
"rules": {
"mission-cafe" : {
".read": "auth != null",
".write": false
},
"issues" : {
".read": "auth != null",
".write": "auth != null"
}
}
}
当我向 firebase 发出身份验证请求时,我会返回一组用户数据,如下所示:
Object
accessToken: "eyJhbI-long string-ww3w"
expirationTime: 1631656873062
refreshToken: "ACzBnC another long string dUJHK-"
[[Prototype]]: Object
因此,现在当我从 Firebase 实时数据库读取/写入时,我认为我应该将其中一个令牌作为 html.get() 或 html.patch() 语句中的 JSON 有效负载的一部分传回。
const getString='https://freelance-xxxx-default-tdb.firebaseio.com/xxxxxx.json';
return this.http.get<{ [key: string]: MyData }>(getString).pipe(...)
关键问题 1:放置从原始身份验证返回的令牌数据的正确语法是什么?
当我阅读文档时,我显然应该在 http.get() 或 patch() 语句中发回一个 &auth='long-token-string" ......但我无法找到关于哪个令牌的文档return 以及关键字 auth 实际上是否是该字符串的正确标识符。
关键问题 2: 显然发送 uid 是代替身份验证令牌的选项。在我的应用程序中,我想从匿名登录开始,所以在第一次数据访问时我不会有 uid。我错过了一个概念吗?
谢谢您的帮助。
保罗
解决方案
您需要按照文档中描述的方法从客户端检索 Firebase ID 令牌,即firebase.auth().currentUser.getIdToken(/* forceRefresh */ true)
.
然后,如此处所述,将其添加到 url 的末尾作为查询字符串参数:
const getString = 'https://freelance-xxxx-default-tdb.firebaseio.com/xxxxxx.json?auth=' + idToken
由于您不共享那么多代码,因此这里有一个带有 axios 库的通用 JS 示例:
firebase // use this.fireAuth.signInAnonymously() in your case
.auth()
.signInAnonymously()
.then((userCredential) => {
// We get the user from the userCredential,
// but we could very well do firebase.auth().currentUser as well
return userCredential.user.getIdToken(/* forceRefresh */ true);
})
.then((idToken) => {
return axios.get(
'https://freelance-xxxx-default-tdb.firebaseio.com/xxxxxx.json?auth=' + idToken
);
})
.then((response) => {
// handle success
console.log(response);
})
.catch((error) => {
// handle error
console.log(error);
});
旁注:是否有任何不使用 JS SDK 与 RTDB 交互的具体原因?它比使用 REST API 更容易。
推荐阅读
- python - 将批处理文件夹创建脚本转换为 python
- javascript - 如何使用谷歌脚本将功能添加到单元格中?
- node.js - 上传文件并使用 express 验证 csrf 令牌
- mysql - 如何有效地锁定/阻止行?
- php - SQL JOIN 不返回任何结果
- python - 从 python 字典中,如何将键和值保存到 *.txt 文件中
- python - 具有相似主体的覆盖方法
- python-3.x - 如何以最佳方式解决寻找连续因子的问题?
- angular - Angular router.navigate 不适用于 Material Autocomplete
- python - 可以使用@staticmethod 替换@classmethod 并返回类的实例吗?