是否可以知道云端防火墙文档的传入请求源的主机名?我想写一个allow write: if request.resource.data.source_host_name == some_predefined_value
形式的数据库规则。这是一个Web应用程序,所以我试图找到一种方法来限制谁不使用传统的auth方法写入我的数据库。
答案 0 :(得分:2)
Cloud Firestore无法实现这种规则。它也不会非常安全,因为它可以spoof source IP addresses。
如果您想限制谁可以访问您的数据库,唯一受支持的机制是通过安全规则和Firebase身份验证。
答案 1 :(得分:1)
这是我与Firestore交互时记录客户端IP地址的解决方案。我同意道格(Doug)的观点,即这不能防止IP欺骗。尽管如此,它对我的目的还是有帮助的。
诀窍是使用Cloud Functions创建中间API端点,然后与Firestore进行交互。这是一个示例Google Cloud函数。
const admin = require("firebase-admin");
const functions = require("firebase-functions");
admin.initializeApp();
exports.yourEndpoint = functions.https.onRequest(req, (res) => {
// Get the IP address from the headers in the request object
const ipAddress = getIPAddress(req);
// Do whatever you need in your firestore DB with ipAddress
admin.firestore().collection('ipAddresses').add({address: ipAddress})
.then((writeResult) => {
return res.status(200).send();
})
.catch((error) => {
return res.status(500).send();
});
});
// Helper function to extract the IP address from request headers
function getIPAddress(req) {
return (
req.headers["fastly-client-ip"] ||
req.headers["x-forwarded-for"] ||
req.headers["No IP, probably because we are in development mode"]
);
}
注意:在开发模式下,您将不会获得IP地址,因为Firebase仿真器不会创建正确的标头。