问题描述
在 firebase 可调用函数中,我们得到了一个方便的上下文参数,其中包括身份验证数据,包括 uid。我已经正确定义了我的 firestore 规则,这些规则基于登录用户工作。有没有办法使用这个上下文从服务器上写,就好像它是用户一样,所以规则适用?
一个简单的例子:
export const firestoreCreateDocumentOnCall = functions
.region(...regions).https.onCall(async (data,context) => {
try {
const path = data.path as string;
const docData = data.data as any;
// ! This writes as admin,I would like as if it were the user provided by context !
await admin.firestore().doc(path).set(docData);
return;
} catch(error) {
console.error(`Error: ${error}`);
return { error };
}
});
解决方法
从 Cloud Functions 中访问 Firestore 是通过 Admin SDK 进行的,该 SDK 以管理权限运行。无法通过 Admin SDK 以备用用户身份访问 Firestore。
我能想到的唯一替代方法是通过其 REST API 访问 Firestore,但我从未尝试过,而且它绝对不如使用 SDK 方便。
另见: