服务概述
Firebase代理服务是一个基于Cloudflare Workers构建的高性能代理,专为解决Firebase服务在特定网络环境下的访问限制而设计。此服务支持Firebase的所有产品线,包括Firebase Auth、Realtime Database、Storage、Functions等。
全面代理支持
支持代理Firebase全套服务,包括身份验证、数据库、存储和云函数。
零配置客户端
客户端只需更改Firebase SDK的引用路径,无需其他复杂配置。
API密钥验证
通过API密钥验证请求,防止恶意使用和未授权访问。
自动CORS处理
自动处理跨域资源共享(CORS)设置,确保浏览器端请求正常工作。
智能缓存策略
对静态资源提供缓存支持,提高加载速度和减少流量消耗。
请求超时控制
自动处理请求超时,避免客户端无限等待的问题。
API端点
GET
/{firebase-domain}/{path}
访问Firebase服务的GET请求,用于获取数据、加载脚本等。
路径参数
| 参数 | 描述 | 示例 |
|---|---|---|
| firebase-domain 必填 | Firebase服务的域名或域名前缀 | www.gstatic.com |
| path 必填 | 资源的路径 | firebasejs/9.22.0/firebase-app-compat.js |
查询参数
| 参数 | 描述 | 必填 | 默认值 |
|---|---|---|---|
| auth | API密钥,用于验证请求 | 否 | 无 |
| [原始查询参数] | 会传递所有原始请求中的其他查询参数 | 否 | 无 |
响应示例
200 OK返回从Firebase服务获取的原始内容
POST
/{firebase-domain}/{path}
向Firebase服务发送POST请求,用于提交数据、身份验证等。
路径参数
| 参数 | 描述 | 示例 |
|---|---|---|
| firebase-domain 必填 | Firebase服务的域名或域名前缀 | identitytoolkit.googleapis.com |
| path 必填 | 资源的路径 | v1/accounts:signInWithPassword |
查询参数
| 参数 | 描述 | 必填 | 默认值 |
|---|---|---|---|
| auth | API密钥,用于验证请求 | 否 | 无 |
| [原始查询参数] | 会传递所有原始请求中的其他查询参数 | 否 | 无 |
请求体
完整传递原始请求体到Firebase服务
响应示例
200 OK返回Firebase服务的原始响应
授权认证
为了保护代理服务不被滥用,所有请求需要提供有效的API密钥作为auth查询参数。例如:
https://your-worker.workers.dev/www.gstatic.com/firebasejs/9.22.0/firebase-app-compat.js?auth=your-api-key
API密钥应当保密,不应在公开场合分享。在生产环境中,建议经常更换API密钥并限制允许的请求来源。
使用示例
基本用法
以下是在客户端使用代理服务的基本示例:
// 定义代理配置
const PROXY_URL = "https://your-worker.workers.dev";
const AUTH_KEY = "";
// 导入Firebase SDK
document.write(`<script src="${PROXY_URL}/www.gstatic.com/firebasejs/9.22.0/firebase-app-compat.js?auth=${AUTH_KEY}"></script>`);
document.write(`<script src="${PROXY_URL}/www.gstatic.com/firebasejs/9.22.0/firebase-auth-compat.js?auth=${AUTH_KEY}"></script>`);
// 初始化Firebase
window.onload = function() {
firebase.initializeApp({
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_PROJECT_ID.firebaseapp.com",
databaseURL: `${PROXY_URL}/YOUR_PROJECT_ID-default-rtdb.firebaseio.com?auth=${AUTH_KEY}`,
projectId: "YOUR_PROJECT_ID",
storageBucket: `${PROXY_URL}/YOUR_PROJECT_ID.appspot.com?auth=${AUTH_KEY}`,
messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
appId: "YOUR_APP_ID"
});
// 现在可以正常使用Firebase服务
firebase.auth().onAuthStateChanged(function(user) {
console.log("Auth state changed:", user);
});
};
Firebase模块化SDK (v9+)
如果使用现代的模块化SDK,示例如下:
// 定义代理配置
const PROXY_URL = "https://your-worker.workers.dev";
const AUTH_KEY = "";
// 异步导入Firebase模块
import { initializeApp } from `${PROXY_URL}/www.gstatic.com/firebasejs/9.22.0/firebase-app.js?auth=${AUTH_KEY}`;
import { getAuth, onAuthStateChanged } from `${PROXY_URL}/www.gstatic.com/firebasejs/9.22.0/firebase-auth.js?auth=${AUTH_KEY}`;
// 初始化Firebase
const app = initializeApp({
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_PROJECT_ID.firebaseapp.com",
databaseURL: `${PROXY_URL}/YOUR_PROJECT_ID-default-rtdb.firebaseio.com?auth=${AUTH_KEY}`,
projectId: "YOUR_PROJECT_ID",
storageBucket: `${PROXY_URL}/YOUR_PROJECT_ID.appspot.com?auth=${AUTH_KEY}`,
messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
appId: "YOUR_APP_ID"
});
// 使用Firebase服务
const auth = getAuth(app);
onAuthStateChanged(auth, (user) => {
console.log("Auth state changed:", user);
});
配置选项
代理服务提供以下配置选项,管理员可以修改CONFIG对象来自定义服务行为:
| 配置项 | 描述 | 默认值 |
|---|---|---|
| allowedOrigins | 允许的请求来源域名列表,用于CORS控制 | ['*'] (允许所有域名) |
| authKey | API密钥,用于验证请求,设为空字符串则不验证 | |
| firebaseDomains | 允许代理的Firebase域名列表 | 多个Firebase相关域名 |
| cacheTime | 缓存时间(秒),0表示不缓存 | 86400 |
| timeout | 请求超时时间(毫秒) | 30000 |
| enableDocs | 是否启用API文档页面 | true |