Firebase 代理服务 v1.0.0

用于解决网络限制问题的高性能中转代理

服务概述

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