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

Next.js 13服务端组件中如何获取Cookie?

可行解决方案

Next.js 13的服务端组件运行在服务器环境,没有浏览器的document对象,所以document.cookie无法使用。以下是几种获取并传递Cookie的实用方案:

1. 服务端组件直接使用Next.js内置cookies() API(推荐)

Next.js App Router 提供了next/headers中的cookies()函数,专门用于在服务端组件中获取请求携带的Cookie。

代码示例:

import axios from "axios";
import { cookies } from "next/headers";

// 在服务端组件内创建axios实例并配置
const Api = axios.create({
  baseURL: "http://127.0.0.1:5000",
});

// 获取指定Cookie(替换成你的Authorization对应的cookie键名)
const authCookie = cookies().get("auth_token")?.value;
if (authCookie) {
  // 配置Authorization头
  Api.defaults.headers.common["Authorization"] = `Bearer ${authCookie}`;
  // 如果后端需要直接传递Cookie头,可改用这行:
  // Api.defaults.headers.common["Cookie"] = `auth_token=${authCookie}`;
}

注意:cookies()仅能在服务端组件、服务端路由处理函数中调用,不能用于客户端组件。

2. 从客户端组件传递Cookie到服务端组件

如果业务需要从客户端传递Cookie到服务端组件,可在客户端组件中用document.cookie获取后,通过props传递。

示例:

  • 客户端组件(需添加'use client'指令):
'use client';

import ServerComponent from './ServerComponent';

export default function ClientComponent() {
  // 解析客户端Cookie
  const authCookie = document.cookie.split('; ')
    .find(row => row.startsWith('auth_token='))
    ?.split('=')[1];
  
  return <ServerComponent authCookie={authCookie} />;
}
  • 服务端组件:
import axios from "axios";

export default function ServerComponent({ authCookie }) {
  const Api = axios.create({
    baseURL: "http://127.0.0.1:5000",
  });

  if (authCookie) {
    Api.defaults.headers.common["Authorization"] = `Bearer ${authCookie}`;
  }

  // 后续使用Api发起请求
  return <div>服务端组件内容</div>;
}

⚠️ 注意:仅适合非敏感Cookie,敏感信息通过客户端传递存在XSS风险,需谨慎使用。

3. 在服务端路由中处理Cookie并转发请求

如果API请求是在Next.js的服务端路由(如app/api/xxx/route.js)中发起,可直接在路由内获取Cookie,再转发给后端:

import { cookies } from "next/headers";
import axios from "axios";

export async function GET() {
  const authCookie = cookies().get("auth_token")?.value;
  const response = await axios.get("http://127.0.0.1:5000/api/data", {
    headers: {
      Authorization: `Bearer ${authCookie}`,
      // 或者直接传递完整Cookie头
      Cookie: `auth_token=${authCookie}`
    }
  });

  return Response.json(response.data);
}

前端(客户端/服务端组件)直接调用这个Next.js API路由即可,无需自行处理Cookie。

内容的提问来源于stack exchange,提问作者José Lisboa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:13:30