javascript - 如何通过发布请求发送正确的数据,以满足这个 firebase 规则集?
问题描述
我真的整天都在为此苦苦挣扎,因此真诚地感谢任何帮助...
目前我有一个带有工作身份验证系统的应用程序。用户可以将数据添加到 Firebase。用户在每个帖子中添加值。值是“描述”和“名称”。我想要实现的是,用户只能看到数据,他自己发布在我的火力基地上。
因此,我使用的 firebase 中的代码如下所示:
{
"rules": {
"notes": {
"$uid": {
".read": "auth != null && auth.uid == $uid",
".write": "auth != null"
}
}
}
}
但是存储的值具有以下结构: Backend-name notes 0 description:“this 的值” name:“that 的值”
如果我尝试从该数据库中获取数据,我只会收到 401 错误(拒绝访问)。所以我认为错误是,uid 在此丢失。
我将如何实现这一目标?我现在想分享部分代码。如果这还不够,我将与您分享所有内容。但尽管如此,我希望这已经足够了。
以下是相关部分:
note.service.ts
private notes: Note[] = [];
setNotes(notes: Note[]) {
this.notes = notes;
this.notesChanged.next(this.notes.slice());
}
getNotes() {
return this.notes.slice();
}
note.model.ts
export class Note {
public name: string;
public description: string;
constructor(name: string, desc: string) {
this.name = name;
this.description = desc;
}
}
数据.storage.ts
loadNotes() {
return this.http
.get<Note[]>(
'https://XXXXXXX.firebaseio.com/notes.json'
)
.pipe(
map(notes => {
return notes.map(note => {
return {
...note
};
});
}),
tap(notes => {
this.noteService.setNotes(notes);
})
);
}
包含名称和描述的表单内容将作为一个值发送到 firebase。结构如上图。
那么你将如何做到这一点呢?
非常感谢您阅读本文并帮助我!
编辑:我不确定,如果有人读到这个......但无论如何我都会尝试。我已经收到一个 idToken,将 get 请求更改为广告 idToken,但不知道如何相应地更改 put 请求。
而且我什至不确定firebase规则是否还可以。
解决方案
该请求被拒绝,因为您的规则规定只有经过身份验证的用户才能访问该文档。
您已经说过您有一个有效的 Auth 系统,因此 REST 请求工作所需的步骤是auth
Frank 在上面的文档中提到的令牌。
该令牌可通过此方法获得getIdToken
:
https://firebase.google.com/docs/reference/js/firebase.User#getidtoken
然后您可以插入您的请求,例如:
https://XXXXXXX.firebaseio.com/notes.json?auth=<ID_TOKEN>
推荐阅读
- java - Java中字符串`**abc_abc** abc abc **abc_abc**中`**abc_abc**`的正则表达式公式
- c# - 如何在 CefSharp WinForms C# 中阻止/限制特定 URL
- controls - 如何在情节中添加对单个子情节的控制?
- algorithm - 动态连通性问题的联合方法的大O
- reactjs - 如何过滤 React 中的选择选项
- python - 主进程完成后保持函数运行
- php - 单击除主页以外的每个页面时,我的 wordpress 网站都会显示 wamp 服务器详细信息
- javascript - 未捕获(承诺):错误:未找到 MyOpportunitiesFilterPage 的组件工厂。你把它添加到@NgModule.entryComponents 了吗?
- arrays - strcpy() 在结构内的字符串上 - 未定义?
- javascript - Angular:我必须通过 javascript 将浏览器选项卡静音。没有。所有组件中的音频对象,所以我需要通用脚本来暂停应用程序音频