我有一个cloud函数,只有当请求来自我的域时,我才想调用它。
export const createMatch = functionUS.https.onCall(async (data, context) => {
if (context.auth === null || context.auth?.uid == null || data?.userId !== context.auth?.uid)
throw new functions.https.HttpsError("unauthenticated", "not authenticated");
try {
const user = await admin.auth().getUser(context.auth.uid);
if (!user.displayName) throw new functions.https.HttpsError("failed-precondition", "username is missing");
data.username = user.displayName;
const matchRepo = new MatchRepository(new FirestoreMatchProvider("matches"));
const match = Match.fromMap(new Map<string, any>(Object.entries(data)));
if (!match.isValid()) throw new functions.https.HttpsError("failed-precondition", "match data is not valid");
await matchRepo.createMatch(match, context.auth.uid);
} catch (error) {
functions.logger.error(`handleMatchCreate: ${error}`);
}
});
我注意到express有主机名选项,我可以从上下文中获取该选项,但这只是主机名的一个标头。据我所知,这可能是伪造的。有什么办法让我知道这些请求是否来自我的域吗?
因为有人可以查看代码,获得我的firebase配置,并为自己制作一个应用程序,只要他愿意,就可以随时发送请求。这不是我想要的。
它是HTTP协议的一部分,你不能更改它。只需不依赖网络层(DNS和IP(。你不能做更多的