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

Nuxt3 SSR中Vuefire的getCurrentUser服务端返回null问题求助

解决Nuxt3 VueFire认证中间件服务端重定向问题

1. 确保VueFire Auth配置正确

首先检查你的nuxt.config.ts,必须启用服务端会话同步,否则服务端无法获取客户端的认证状态:

export default defineNuxtConfig({
  modules: ['nuxt-vuefire'],
  vuefire: {
    auth: {
      enabled: true,
      // 启用会话Cookie,让服务端能读取用户认证状态
      sessionCookie: true,
      sessionCookieOptions: {
        name: '__session',
        httpOnly: true,
        sameSite: 'lax',
        path: '/',
        secure: process.env.NODE_ENV === 'production',
      },
    },
    config: {
      // 填入你的Firebase项目配置信息
      apiKey: 'YOUR_API_KEY',
      authDomain: 'YOUR_AUTH_DOMAIN',
      projectId: 'YOUR_PROJECT_ID',
      storageBucket: 'YOUR_STORAGE_BUCKET',
      messagingSenderId: 'YOUR_SENDER_ID',
      appId: 'YOUR_APP_ID',
    },
  },
})

2. 调整全局认证中间件逻辑

原中间件缺少已登录用户访问公共页的处理逻辑,且未确保服务端Auth实例就绪。修改后的中间件如下:

// middleware/auth.global.ts
import { useFirebaseAuth } from 'vuefire';

export default defineNuxtRouteMiddleware(async (to, from) => {
  const auth = useFirebaseAuth();
  // 等待Auth实例在服务端初始化完成
  await auth.authStateReady();

  const user = await getCurrentUser();
  const publicPages = ["/login", "/register", "/thank-you", "/verify"];
  const isPublicPage = publicPages.includes(to.path);

  // 未登录且访问非公共页面 → 重定向到登录页
  if (!user && !isPublicPage) {
    return navigateTo({
      path: "/login",
      query: { redirect: to.fullPath },
    });
  }

  // 已登录且访问公共登录/注册页 → 重定向到默认认证页面(如主页)
  if (user && isPublicPage) {
    return navigateTo("/");
  }
});

关键说明

  • VueFire的服务端用户状态同步完全依赖会话Cookie,必须在配置中开启sessionCookie,否则服务端无法读取客户端的认证信息,导致getCurrentUser()返回null。
  • 添加已登录用户访问公共页的跳转逻辑,可避免手动输入/login等URL时出现的重定向循环问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:12:41