【发布时间】:2018-05-20 15:19:26
【问题描述】:
我在我的应用程序中使用匿名用户,并且有一个函数只使用 uid 创建 user
export const createUserObject = functions.auth.user().onCreate((user, context) => {
const userData = {"uid": user.uid}
admin.firestore().collection("users").doc(user.uid).set(userData).then(writeResult => {
console.log('User Created result:', writeResult);
}).catch(err => {
console.log(err);
});
});
现在我想为用户添加另一个端点来创建note。我打算用content 和uid 两个字段记录它自己的集合,以供创建它的用户参考。
Firebase 函数有没有办法为触发的用户检索uid?所以我可以写这样的东西,或者我必须让用户把它和注释一起发送?
export const addNote = functions.https.onRequest((request, response) => {
if(request.method !== "POST"){
response.sendStatus(404)
return;
}
const content = request.body.content
const data = {
content: content,
uid: HOW_CAN_I_GET_CURRENT_USER
};
let db = admin.firestore()
return db.collection("notes").add({content: content}).then((ref) => {
response.sendStatus(201)
})
});
【问题讨论】:
-
触发HTTP功能的用户可通过
req.headers.authorization获取。请参阅此答案以获取示例链接:stackoverflow.com/questions/42751074/… -
您实际上并不需要云功能。 Firebase 鼓励直接从客户端操作数据,而不需要后端代码。因此,您可以像创建用户文档一样创建笔记。
-
@RicardoSmania 所以我创建注释并将 uid 放在客户端?客户自己管理关系?
-
@sarunw 是的,因为您已经在对用户进行身份验证,您可以使用客户端的 uid。您可能还应该定义安全规则,以便用户只能查看和更改他们拥有的数据。
-
@FrankvanPuffelen 您能否发布您的解决方案作为答案?
标签: javascript firebase firebase-authentication google-cloud-functions