You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Functions中间件:结合Firebase Auth处理前端请求问题

解决Firebase函数中间件根据Auth登录状态重定向的问题

我完全懂你的困扰——当用户直接从前端发起请求时,没法像后端接口那样手动加Auth头或者依赖手动处理__session Cookie,对吧?其实Firebase已经帮我们做好了大部分自动处理的工作,下面是具体的实现方案:

核心思路

Firebase Auth在用户登录后,会自动在浏览器中设置一个__session Cookie(如果你用Firebase Hosting托管前端的话),这个Cookie里包含了用户的ID Token。我们的HTTP函数可以直接从请求中提取这个Cookie,然后用Firebase Admin SDK验证Token的有效性,从而判断用户是否已登录,再决定重定向到静态SSR还是动态版本。

步骤1:初始化Firebase Admin SDK

首先在你的函数项目里确保已安装依赖并初始化Admin:

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp();

步骤2:编写中间件函数逻辑

下面是完整的函数代码,包含Cookie提取、Token验证和重定向逻辑:

exports.requestRouter = functions.https.onRequest(async (req, res) => {
  // 从请求中提取__session Cookie
  const sessionCookie = req.cookies.__session;
  
  let isAuthenticated = false;

  if (sessionCookie) {
    try {
      // 验证ID Token,设置过期时间容错(比如5分钟)
      const decodedToken = await admin.auth().verifyIdToken(sessionCookie, true);
      isAuthenticated = true;
      // 这里可以获取用户信息,比如decodedToken.uid、decodedToken.email等
      functions.logger.info(`用户 ${decodedToken.uid} 已登录`);
    } catch (error) {
      // Token无效或已过期,视为未登录
      functions.logger.error('Token验证失败:', error);
      isAuthenticated = false;
    }
  }

  // 根据登录状态决定重定向目标
  if (isAuthenticated) {
    // 已登录:重定向到动态版本(比如你的动态SSR或客户端渲染页面)
    res.redirect('https://your-domain.com/dynamic');
  } else {
    // 未登录:重定向到静态SSR版本
    res.redirect('https://your-domain.com/static-ssr');
  }
});

步骤3:配置Firebase Hosting路由

要让所有前端请求都经过这个中间件函数,需要在firebase.json里设置路由规则:

{
  "hosting": {
    "rewrites": [
      {
        "source": "**",
        "function": "requestRouter"
      }
    ]
  }
}

额外说明

  • 如果你的前端不是托管在Firebase Hosting上,那需要让前端在用户登录后,手动将ID Token存入Cookie(比如命名为__session),或者通过Authorization: Bearer <id-token>的请求头传递,然后在函数里对应提取验证即可。
  • 验证Token时的第二个参数true是启用过期时间的宽松验证,避免因为网络延迟导致的Token刚过期就验证失败,你可以根据需求调整。
  • 记得在函数部署前,确保已正确配置Firebase项目的权限,Admin SDK默认初始化后就具备验证Token的权限。

这样一来,用户直接发起的前端请求就会自动经过这个中间件,根据登录状态被路由到对应的版本啦!

内容的提问来源于stack exchange,提问作者jirungaray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:29:31