【发布时间】:2021-01-29 10:23:09
【问题描述】:
我真的整天都在为此苦苦挣扎,因此真诚地感谢任何帮助...
目前我有一个带有工作身份验证系统的应用程序。 用户可以将数据添加到 Firebase。用户在每个帖子中添加值。 值是“描述”和“名称”。 我想要实现的是,用户只能看到数据,他自己发布在我的 firebase 上。
因此,我使用的 firebase 中的代码如下所示:
{
"rules": {
"notes": {
"$uid": {
".read": "auth != null && auth.uid == $uid",
".write": "auth != null"
}
}
}
}
但存储的值具有以下结构: 后端名称 笔记 0 描述:“这个的价值” name: "那个值"
如果我尝试从该数据库中获取数据,我只会收到 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;
}
}
data.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 规则是否正常。
【问题讨论】:
-
你想过使用 angularfire 吗?
-
此处记录了验证 REST 请求的过程:firebase.google.com/docs/database/rest/auth 不过,我会考虑为您的平台使用 Firebase SDK,因为它可以处理所涉及的许多边缘情况。
-
@FrankvanPuffelen 感谢您的建议。我想我实际上已经快到了……所以我想坚持这一点,因为我已经为此付出了努力。但我无法完成它。真是令人沮丧。
-
@JSmith 我得调查一下。但也许下次。谢谢。
标签: javascript angular firebase firebase-realtime-database